显示菜单链接到登录用户ASP.NET MVC 5

时间:2014-08-06 19:56:28

标签: c# asp.net-mvc entity-framework asp.net-mvc-5

所以我是整个ASP.NET MVC 5的新东西,我正在创建我的第一个迷你应用程序。我需要在用户登录后才显示配置文件链接。我有一个配置文件控制器,该链接会将用户重定向到配置文件控制器。这是我的代码,但不幸的是它没有用。

我正在使用内置的ASPNet.Identity。我只修改了它,在注册时需要一个电子邮件地址。这是我正在使用的示例代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using artisan.Models;


namespace artisan.Controllers
{
    [Authorize]
    public class AccountController : Controller
    {
        public AccountController()
            : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
        {
        }

        public AccountController(UserManager<ApplicationUser> userManager)
        {
            UserManager = userManager;
        }

        public UserManager<ApplicationUser> UserManager { get; private set; }

        public ActionResult Profile()
        {
            return View();
        }

        //
        // GET: /Account/Login
        [AllowAnonymous]
        public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();

1 个答案:

答案 0 :(得分:1)

所以你说,在用户成功登录后,你想将它们重定向到另一个名为ProfileController的控制器中的某个动作?

如果这就是你所追求的,那就非常简单了。在您的登录方法中对用户进行身份验证后,您只需在其中输入return RedirectToAction("Index", "Profile");即可。这是一个做到这一点的例子。这有点复杂,但我评论了一切,所以你可以理解。由于不同的原因,其中有多个重定向。

[AllowAnonymous]
    [HttpPost]
    public async Task<ActionResult> Login(Models.AccountViewModel vm, string returnUrl)
    {
        //first make sure they filled in all mandatory fields
        if (ModelState.IsValid)
        {
            //try to find the user by the credentials they provided
            var user = await UserManager.FindAsync(vm.LoginModel.Username, vm.LoginModel.Password);
            //if user is null then they entered wrong credentials
            if (user != null)
            {
                //if user has confirmed their email already
                if (user.EmailConfirmed == true)
                {
                    //attempt to sign in the user
                    await SignInAsync(user, vm.LoginModel.RememberMe);

                    //if the return url is empty then they clicked directly on login instead of trying to access
                    //an unauthorized area of the site which redirected them to the login.
                    if (!string.IsNullOrEmpty(returnUrl))
                        return RedirectToLocal(returnUrl);

                    //returnUrl was empty so user went to log in first
                    else
                    {
                        //lets check and see which roles this user is in so we can direct him to the right page
                        var rolesForUser = UserManager.GetRoles(user.Id);
                        //users can be in multiple roles but the first role dictates what they see after they sign in
                        switch (rolesForUser.First())
                        {
                            case "Normal_User":
                                return RedirectToAction("Feed", "Account");
                            default:
                                //user is not in any roles send him to the default screen

                                break;
                        }
                    }
                }

                    //user has not confirmed their email address redirect to email confirmation
                else
                {
                    //resend confirmation
                    await SendConfirmationEmail(user.Id);

                    //redirect user to unconfirmed email account view
                    return RedirectToAction("UnconfirmedAccount", "Account", new { Email = user.Email, UserId = user.Id });
                }

            }
            else
            {
                //add errors to the view letting the user know they entered wrong credentials. Code will fall through and return
                //the view below with these errors
                ModelState.AddModelError("", "Invalid username or password.");
            }

        }

        // If we got this far then validation failed
        return View(vm);
    }