自定义表单身份验证注销重定向到另一个页面?

时间:2014-07-08 14:08:28

标签: asp.net-mvc

我正在使用asp.net mvc 5并使用自定义表单验证。当我尝试登录时,它会完美登录,但是当我尝试注销时,它会将我重定向到我在webconfig文件中设置的logiurl,这个文件在下面给出。

<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="30" />
</authentication>

而不是将我带到Logoff操作方法中定义重定向的页面,如下所示。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Logoff()
{
 _formsAuth.SignOut();
 return RedirectToAction("Index", "Home");
}   

在Chrome浏览器中一切正常,但它在firefox中无效。

1 个答案:

答案 0 :(得分:0)

这个方法已被弃用,它对测试很有用,我不再使用它了,而是使用我自己定制的已实现模板,在安全方面,客户是第一位的。

话虽如此,我仍然没有回答你使用的类和模型的问题。

使用表单身份验证功能需要调用System.Web.Security.FormsAuthentication类的两个静态方法:

  • Authenticate方法验证用户提供的凭据。
  • SetAuthCookie方法将cookie添加到响应中 浏览器,这样用户每次都不需要进行身份验证 提出要求。
public class FormsAuthProvider : IAuthProvider {
    public bool Authenticate(string username, string password){
        bool result = FormsAuthentication.Authenticate(username, password);
        if (result) {
            FormsAuthentication.SetAuthCookie(username, false);
        }
        return result;
    }


public class AccountController : Controller {
    IAuthProvider authProvider;
    public AccountController(IAuthProvider auth) {
        authProvider = auth;
    }
    public ViewResult Login() {
        return View();
    }
    [HttpPost]
    public ActionResult Login(LoginViewModel model, string returnUrl) {
        if (ModelState.IsValid) {
            if (authProvider.Authenticate(model.UserName, model.Password)) {

                return Redirect(returnUrl ?? Url.Action("Index", "Admin"));
            } else {
                ModelState.AddModelError("", "Incorrect username or password");
                return View();
            }
        } else {
            return View();
        }
    }
}