在转到我的应用程序的任何位置之前,如何强制用户登录?

Posted

技术标签:

【中文标题】在转到我的应用程序的任何位置之前,如何强制用户登录?【英文标题】:How can I force the user login before go to any where in my application? 【发布时间】:2017-07-02 16:43:40 【问题描述】:

我正在处理 asp.net mvc5 项目,我的问题是强制用户登录,然后他们可以在我的网站上进行任何操作。 我正在使用 Session 来检查用户登录与否(我没有使用身份或授权)这是我的登录代码:

    [HttpPost]
    public ActionResult Login(User user)
    
        if (IsValid(user.username, user.password))
        
            Session["username"] = user.username;
            return RedirectToAction("Index", "Home");
        
        else
        
            ModelState.AddModelError("", "Login details are wrong.");
        
        return View(user);
    

我可以使用 Session 检查用户登录或不登录,但我不能拒绝用户访问链接,如果我必须手动执行此操作,我需要将下面的块代码添加到我拥有的每个控制器的任何操作中。

    public ActionResult Index()
    
        if (Session["username"] != null)
        
            //then user can go anywhere with any link
        
        else
        
            //user cannot go to here without login
        
    

当用户单击任何链接或在浏览器中键入链​​接时,我有什么方法可以强制用户重定向到登录页面(如果他们没有登录)?我正在搜索配置路由或使用过滤器配置,但似乎无法解决我的问题。我希望有一种通用的方法来做到这一点,而无需手动将检查代码添加到每个控制器/动作中。

感谢您阅读我的问题,任何评论都可以帮助我解决这个问题。

【问题讨论】:

如果没有会话,请尝试将他重定向到起始页。 @WasteD 我可以检查并将用户重定向到登录页面,但我需要将检测登录代码复制到用户可以访问的任何控制器或操作。如果我不能解决这个问题,那将是最后的方法。我需要知道是否有比我指定的代码更通用的方法。无论如何,谢谢你回复我! 【参考方案1】:

全局解决此问题的一种可能方法是覆盖控制器上的 OnActionExecuting 方法,如果没有用户登录,该方法会进行检查并重定向到主页,如果有用户则允许该操作。

这可以在基本控制器上完成,以便它适用于所有网站(通过使所有控制器都继承自这个控制器)。

public abstract class LoginRequiredController : Controller

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    
        if (Session["username"] != null)
        
            base.OnActionExecuting(filterContext);
        
        else
        
            //Redirect to the main page, or login, or somewhere else, without running the requested action
            filterContext.Result = Redirect("/");
            return;
        
    

从该控制器继承的控制器将检查每个请求是否有用户,并在没有用户的情况下重定向到主页,而无需为每个方法复制/粘贴此检查。

当然,登录控制器不应该继承自它,否则根本无法登录。

【讨论】:

以上是关于在转到我的应用程序的任何位置之前,如何强制用户登录?的主要内容,如果未能解决你的问题,请参考以下文章

在转到另一个Activity之前,需要editText字段

JavaFX 在转到下一个方法之前等待动画方法完成

如何在转到角度之前将 SKSpriteNode 旋转 360°

在不强制用户登录/允许的情况下嵌入公共 Facebook 页面的活动源

在转到下一个视图控制器(Swift)之前进行异步调用

Nextjs如何在转到下一页时不卸载上一页(保持状态)