ASP.NET MVC Запомнить меня

Вопрос:

У меня есть проект, основанный на ASP.NET MVC 4, простой аутентификацией.

Я пытаюсь заставить мой сайт автоматически регистрировать пользователя, когда он проверяет флажок “Запомнить меня”. Однако у меня проблемы с этим. После закрытия браузера и его повторного открытия пользователь никогда не войдет в систему.

После проверки (http://forums.asp.net/t/1654606.aspx#4310292) я добавил машинный ключ, созданный IIS. Я установил автоматическое создание во время выполнения и создание уникального ключа для каждого приложения, которое было отключено, и у меня есть сгенерированные ключи). К сожалению, это не сработало.

Глядя на “Remember me” с ASP.NET MVC Authentication не работает, я добавил в строку FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe), но это не сработало, поэтому я сейчас прокомментировал это,

Я попробовал ответить на ASP.NET MVC RememberMe, но это тоже не работает.

Мне что-то не хватает?

//FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

if (model.RememberMe)
{
//int timeout = model.RememberMe ? 525600 : 2; // Timeout in minutes,525600 = 365 days
int timeout = 525600;
var ticket = new FormsAuthenticationTicket(model.UserName, model.RememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
Response.Cookies.Add(cookie);
}

Ответ №1

вот как я это делаю

public class MyAuthentication
{
public static HttpCookie GetAuthenticationCookie(LoginModel model, bool persistLogin)
{
// userData storing data in ticktet and then cookie
JavaScriptSerializer js = new JavaScriptSerializer();

var userData = js.Serialize(model);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
"akash",
DateTime.Now,
DateTime.Now.AddHours(1),
persistLogin,
userData);

string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie cookie= new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = authTicket.Expiration; //must do it for cookie expiration
return cookie;
}

internal static bool Login(string UserName, string Password)
{
//UserName="akash" Password="akash"
//check can be done by DB
if (UserName== "akash" && Password == "akash")
return true;
else
return false;
}
}

а потом

[HttpGet]
[AllowAnonymous]
public ActionResult Login()
{
//ViewBag.Message = "Your contact page.";
HttpCookie cookie =  Request.Cookies[FormsAuthentication.FormsCookieName];
// var ek = cookie.Value;
try
{
//some times no cookie in browser
JavaScriptSerializer js = new JavaScriptSerializer();
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
//string data = ticket.UserData;
LoginModel model = js.Deserialize<LoginModel>(ticket.UserData);
if (MyAuthentication.Login(model.UserName, model.Password) == true)
{
RedirectToAction("Index", "Home");
}
}
catch
{

}
return View();

вы можете проверить его на Global.asax или на фильтр авторизации. убедитесь, что у вас есть web.config

<authentication mode="Forms">
<forms defaultUrl="/Home/Login" loginUrl="/home/Login" timeout="2880">
</forms>
</authentication>

и [Авторизовать] перед всем контроллером.

Оцените статью
TechArks.Ru
Добавить комментарий