如何获得当前用户,以及如何使用User类的MVC5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得当前用户,以及如何使用User类的MVC5相关的知识,希望对你有一定的参考价值。

1. 我找到了答案。我会接受这个答案时,我设法创建基于这些一个完全工作的解决方案。
●编号:
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();

那User.Identity.IsAuthenticated和User.Identity.Name将工作不添加using但GetUserId()将不存在没有它。
在MVC中5的默认模板,用户ID是作为字符串存储一个GUID。
●没有最好的做法还,但在扩展配置文件中找到:
概述Identity:
关于如何通过添加一个额外的属性来扩展配置文件示例解决方案:
2.
尝试像:
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
ApplicationUser user = userManager.FindByNameAsync(User.Identity.Name).Result;

适用于RTM。
3.
试试这个:
var user = Membership.GetUser(User.Identity.Name);
Guid currentUserID = (Guid)user.ProviderUserKey;

作品
什么是分配东西的MVC的5个最佳实践
我做在某种程度上你-在项目类中添加用户名。这是simpliest方式。
4.
获取标识是非常简单的,你已经解决了。
你的第二个问题,虽然是一个涉及多一点。
所以,这是所有抢鲜东西的权利 CodeGo.net,但你面临的问题是,你正在与新的属性扩展(或项目集合在你的问题)。
开箱即用的,你会得到一个名为IdentityModel在Models文件夹(在撰写本文时)。在那里你有几个班;ApplicationUser和ApplicationDbContext。添加你的收藏Items你要修改ApplicationUser类,就像你,如果这是一个正常的类,你与实体事实上,如果你把引擎盖下咋一看,你会发现,所有的身份相关的类(用户,角色等..),只是现在波苏斯用适当的数据标注,使他们发挥好与EF6。
接下来,你需要做出改变AccountController构造函数,以便它知道你的DbContext。
public AccountController()

IdentityManager = new AuthenticationIdentityManager(
new IdentityStore(new ApplicationDbContext()));


现在越来越对象为您记录的是一点点深奥是诚实的。
var userWithItems = (ApplicationUser)await IdentityManager.Store.Users
.FindAsync(User.Identity.GetUserId(), CancellationToken.None);

这条线将完成这项工作,你就可以访问userWithItems.Items像你想要的。
心连心
5.
我觉得你的痛苦,我试图做的事。在我来说,我只是想清除
我创建了我所有的控制器从继承一个基控制器类。在这里面我重写OnAuthentication并设置filterContext.HttpContext.User to null这是最好的,我已经成功地远...
public abstract class ApplicationController : Controller

...
protected override void OnAuthentication(AuthenticationContext filterContext)

base.OnAuthentication(filterContext);
if ( ... )

// You may find that modifying the
// filterContext.HttpContext.User
// here works as desired.
// In my case I just set it to null
filterContext.HttpContext.User = null;


...
参考技术A // 用户 public class User public int ID get;set public string Name get;set; public string Password get;set; // 覆盖ClaimsIdentityprivate ClaimsIdentity CreateIdentity(User user, string authenticationType) ClaimsIdentit

如何访问当前用户 ASP.net MVC4 的 SimpleMemberShipprovider 属性

【中文标题】如何访问当前用户 ASP.net MVC4 的 SimpleMemberShipprovider 属性【英文标题】:How to AccessSimpleMemberShipprovider properties of current user ASP.net MVC4 【发布时间】:2012-09-25 20:43:34 【问题描述】:

我在 MVC4 中有一个 razor .cshtml 视图,我想打印我的 userprofile 类的一个字段。我知道我可以从 User.Identity.Name 获取用户名,但我不知道如何在部分中访问当前登录用户的其他属性。我是否需要在我的控制器中执行此操作并在我的视图中引用它?如果是这样,是否有一个可用于所有视图的控制器,所以我没有在每个控制器中设置这个变量?是否有一种简单的方法可以访问视图中 UserProfile 模型类中定义的当前用户属性?给出一些上下文。我有我的模型...

 public class UserProfile
    
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId  get; set; 
        public string UserName  get; set; 

        //Added to round out requirements for site user profile
        public string FirstName  get; set; 
        public string LastName  get; set; 
        public string Site  get; set; 
    

我需要访问视图中的 FirstName。如果我在控制器中获取它,那么我将需要在所有控制器中执行它,因为这是所有页面的页面部分。

【问题讨论】:

【参考方案1】:

我决定将它放在会话变量中,因为它不是关键、敏感或影响应​​用程序的稳定性。在我的登录或注册控制器中,我将会话变量设置为...

var context = new UsersContext();
var curuser = context.UserProfiles.First(p => p.UserName == model.UserName);
Session["FName"] = curuser.FirstName;

我从 Pro ASP.NET MVC 和 this 帖子中得到了这个。在我的 Razor 视图中,我使用来自 this 帖子的这个。

@HttpContext.Current.Session["FName"].ToString()

【讨论】:

【参考方案2】:

在为局部视图提供服务的控制器操作中,将 FirstName 放入 ViewBag。 如果您想返回更多属性,请为它们创建一个 ViewModel 并让控制器操作返回该属性。

【讨论】:

因为这是所有站点页面上的部分内容,并且来自不同的控制器,所以我需要在所有控制器中执行此操作。我想我可以,但我一直在寻找一种方法来做到这一点。就像在 Rails 中一样,有一个 application_controller 可供所有视图访问,因此其中的任何变量都是站点范围的。

以上是关于如何获得当前用户,以及如何使用User类的MVC5的主要内容,如果未能解决你的问题,请参考以下文章

oracle中,用户如何获得grant权限?

如何将类的对象发送到数据库以存储在 ASP.NET MVC5 中?

数据项目中的 MVC 5 HttpContext.User

asp.net mvc5 如何控制没有权限的页面不显示

如何获得附近的用户和距离?

Laravel 5.5如何获得与模型相关的所有模型?