2013-05-03 2 views
1

Я перенаправляю своих пользователей на этот ActionResult, когда они нажимают логин и аутентифицируются. Это приводит их к этому методу:HttpContext.User.Identity.Name is Blank inside [Авторизовать]

[Authorize] 
private ActionResult RouteRegistrationStep() 
{ 
    Debug.Print(HttpContext.User.Identity.IsAuthenticated.ToString()); // false 
    Debug.Print(HttpContext.User.Identity.Name); // blank 
    return RedirectToAction("ContactInfo", "Adjuster"); 
} 

Как есть HttpContext.User.Identity.IsAuthenticated.ToString() false? И, если это неверно, почему атрибут [Authorize] позволил ему в методе начать?

Edit:

Это метод, который Войти перенаправляет их RouteRegistrationStep():

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    if (ModelState.IsValid && db.Users.Where(x => x.username == model.username 
     && x.password == EncryptPassword(model.password)).Count() > 0) 
    { 
     FormsAuthentication.SetAuthCookie(model.username, model.RememberMe); 
     return RedirectToLocal(returnUrl); 
    } 

    // If we got this far, something failed, redisplay form 
    ModelState.AddModelError("", "The user name or password provided is incorrect."); 
    return View(model); 
} 

[Authorize] 
private ActionResult RedirectToLocal(string returnUrl) 
{ 
    if (Url.IsLocalUrl(returnUrl)) 
    { 
     return Redirect(returnUrl); 
    } 
    else 
    { 
     return RouteRegistrationStep(); 
    } 
} 
+2

'[Авторизоваться]' не относится к методам, которые вы называете собой AFAIK. –

+0

@MartinSmith Это интересно. Предлагаете ли вы использовать свойство класса для хранения моего имени пользователя, а не с помощью 'httpcontext'? – user1477388

ответ

2

Действие фильтры применяются только к методам общественных действий, а не частные.

Кроме того, метод FormsAuthentication.SetAuthCookie пишет cookie для ответа HTTP, который недоступен до следующего запроса. Вам нужно будет сделать переадресацию до авторизации пользователей. От MSDN:

поставок билетов форм аутентификации форм-аутентификации информацию следующего запроса, сделанного браузером.

Итак, после установки файла cookie auth переадресуйте пользователя на другое действие с атрибутом Authorize, и оно должно работать правильно.

+0

Спасибо за ваш ответ. Не могли бы вы рассказать? Кажется, я уже перенаправляю их после того, как они были разрешены. – user1477388

+0

Имеет ли объект перенаправления ('ContactInfo' в' AdjusterController') атрибут 'Authorize'? – greg84

+0

Да, ContactInfo в AdjusterController имеет '[Авторизовать]' attr. – user1477388