在转到我的应用程序的任何位置之前,如何强制用户登录?
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;
从该控制器继承的控制器将检查每个请求是否有用户,并在没有用户的情况下重定向到主页,而无需为每个方法复制/粘贴此检查。
当然,登录控制器不应该继承自它,否则根本无法登录。
【讨论】:
以上是关于在转到我的应用程序的任何位置之前,如何强制用户登录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在转到角度之前将 SKSpriteNode 旋转 360°