在进入系统之前必须输入两次登录凭据 - MVC3

Posted

技术标签:

【中文标题】在进入系统之前必须输入两次登录凭据 - MVC3【英文标题】:Have to type login credentials twice before entering system - MVC3 【发布时间】:2011-07-23 08:58:57 【问题描述】:

我正在开发一个 ASP.NET MVC 3 应用程序,并且我正在使用表单身份验证来处理所有登录功能。我创建了 3 个用户角色 - 经理、客户和导师,用户将根据他们的角色被引导到不同的视图。在我对角色进行编码之前,我的登录工作正常。这是来自我的控制器的代码:

 public class AccountController : Controller


    //
    // GET: /Account/LogOn

    public ActionResult LogOn()
    
        return View();
    


    [Authorize(Roles="Manager")]
    public ActionResult Index()
    
        return View();
    

    [Authorize(Roles = "Tutors")]
    public ActionResult TutorMain()
    
        return View();
    

    [Authorize(Roles = "Clients")]
    public ActionResult ClientMain()
    
        return View();
    

    //
    // POST: /Account/LogOn

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    
        if (ModelState.IsValid)
        
            if (Membership.ValidateUser(model.UserName, model.Password))
            
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                
                    return Redirect(returnUrl);
                
                else
                
                    if (User.IsInRole("Manager"))
                    return RedirectToAction("Index", "Account");

                    if (User.IsInRole("Tutors"))
                    return RedirectToAction("TutorMain", "Account");

                    if (User.IsInRole("Clients"))
                    return RedirectToAction("ClientMain", "Account");
                
            
            else
            
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            
        

        // If we got this far, something failed, redisplay form
        return View(model);
    

请帮我弄清楚为什么会这样。

谢谢, 艾米

【问题讨论】:

【参考方案1】:

确保您的登录名是所有相关角色的成员......即,如果您只是“经理”的成员,那么如果您尝试查看需要“导师”的 TutorMain(),则会再次提示您" 角色。

您可以像这样为每个控制器指定多个角色:

[Authorize(Roles="Manager")]
public ActionResult Index()

...


[Authorize(Roles = "Manager, Tutors")]
public ActionResult TutorMain()

        return View();

如果这变得麻烦,则调查“自定义”授权属性 - 如 asp.net mvc Adding to the AUTHORIZE attribute 中所述

【讨论】:

以上是关于在进入系统之前必须输入两次登录凭据 - MVC3的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS sdk,需要按两次登录按钮

广告接入Android 应用接入有米广告积分墙 ( 注册有米云账号 | 首次登录设置开发者信息 | 添加应用 )

广告接入Android 应用接入有米广告积分墙 ( 注册有米云账号 | 首次登录设置开发者信息 | 添加应用 )

“用户必须在下次登录时更改密码”时LDAP验证失败。有解决方案吗

三次登录验证以及购物车

PHP Cookies的学习