2014-12-27 76 views
3

我已将几个自定义列添加到身份2的AspNetUsers表。我正在使用MVC5与C#。有几列包含对网站处理用户很重要的数据,并且有一个允许用户更改这些设置的设置页面。为当前会话刷新经过身份验证的用户个人资料数据的最简单方法

目前,如果设置被更改,用户必须手动注销并重新登录才能使更改生效,这被证明是不可取的。

什么是刷新当前会话的用户配置文件最直接的方式?如果这需要注销/登录才能生效,那么如何使用Identity 2来编码呢? AccountController中不包含几页,我不确定如何访问AccountController中的ApplicationUserManager和ApplicationSignInManager。在AccountController之外复制这些对象似乎不正确,也许这是可以接受的?

回答

3

如果唯一可以更改这些设置的人是用户本身,则可以在修改这些设置时自动为该用户执行SignOutSignIn。基本上,这全部由SignInManager.SignInAsync法进行

用户修改它的设置,你可以这样做后:

var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 
if (user != null) 
{ 
    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 
} 

几页不包含在的AccountController,我不知道如何访问AccountController中的ApplicationUserManager和ApplicationSignInManager。在AccountController之外复制这些对象似乎不正确,也许这是可以接受的?

在使用AccountControllerApplicationUserManagerApplicationSignInManager外面我认为是不是一个好主意。如果你被迫这样做有可能是您的应用architecture.If您正在使用的帐户控制器有问题,应该是负责为用户帐户处理(单一职责原则)

+0

不要用“同意所有功能使用AccountController之外的* Manager类“ - 考虑管理员管理用户帐户的情况。但是,重新登录帐户更改的用户是一团糟。 – trailmax 2014-12-27 22:41:38

+0

@AlexArt我同意您在AccountController之外使用ApplicationUserManager和ApplicationSignInManager的意见。我认为我理解登出/登录程序的最大问题是我会获取用户密码的地方。你的例子没有指定一个能够解决我的问题的密码。感谢您对此和简单代码的意见。我可能可以为我的目的做这项工作。 – rwkiii 2014-12-27 23:18:44

相关问题