登录后的MVC 4重定向用户 [英] MVC 4 Redirect User After LogIn

查看:63
本文介绍了登录后的MVC 4重定向用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

成功登录到特定页面后如何重定向用户.我需要通过授权属性"来执行此操作.在我的问题中,我必须将用户重定向到页面:Index/About,当他/她使用特定的登录名时,其余用户将被重定向到Index/Home.

How can I redirect user after successful login to specific page. I need to do this by Authorize Attribute. In my problem I have to redirect user to page: Index/About when he/she would use specific login name, rest of users would be redirected to Index/Home.

我尝试这种方法:

public class AuthAttribute : AuthorizeAttribute
{
    private string userName;

    protected override bool AuthorizeCore(HttpContextBase filterContext)
    {
        var authorized = base.AuthorizeCore(filterContext);

        if (!authorized)
        {
            return false;
        }

        string userAuthenticated = filterContext.User.Identity.Name;
        bool specialUser = userName.Equals(userAuthenticated,    StringComparison.OrdinalIgnoreCase);

        if (specialUser)
        {
            filterContext.Items["RedirectToHomeAbout"] = true;
            return false;
        }

        return true;
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.HttpContext.Items.Contains("RedirectToHomeAbout"))
        {
            var routeValues = new RouteValueDictionary(new
            {
                controller = "Home",
                action = "About",
            });

            filterContext.Result = new RedirectToRouteResult(routeValues);
        }
        else
        {
            base.OnAuthorization(filterContext);
        }
    }

这是来自帐户控制器的代码:

This is the code from account controller:

[授权] [InitializeSimpleMembership] 公共类AccountController:控制器 { // //GET:/帐户/登录

[Authorize] [InitializeSimpleMembership] public class AccountController : Controller { // // GET: /Account/Login

    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

    //
    // POST: /Account/Login

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: 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);
    }

    //
    // POST: /Account/LogOff

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        WebSecurity.Logout();

        return RedirectToAction("Index", "Home");
    }

谢谢! MarQ

推荐答案

如果我正确理解了您的要求,则可以在您的AccountController中完成该操作:

If I understand your requirement correctly you can do it in your AccountController:

    private string specificUserName = "specificUserName";

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
        {
            if (string.Equals(model.UserName, specificUserName))
            {
                return RedirectToAction("Index", "About");
            }
            return RedirectToAction("Index", "Home");
        }

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

这篇关于登录后的MVC 4重定向用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆