c# - 如何在 ApplicationUser 中设置数据?
问题描述
MyApplicationUser
扩展了一个虚拟UserData
类,例如
public partial class ApplicationUser : IdentityUser
{
[IgnoreDataMember, NotMapped]
public IEnumerable<UserData> UserData { get; set; }
}
如何设置UserData
用户何时登录我的应用程序?
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
var user = _context.Users.Where(x => x.Email == Input.Email).FirstOrDefault();
using (myContext myContext = new myContext())
{
user.UserData = myContext.UserData.Where(x => x.UserId == user.Id);
}
}
}
这样UserData
就可以在我的控制器上进行依赖注入了吗?(我在上面的用户变量中设置了数据,用于演示)
不幸的是,UserData
通过设置identity.AddClaim
不是一个选项,并且不建议在会话中设置此类值
解决方案
你可以尝试这样的事情:
public async Task<ActionResult> Login(string username, int id)
{
// get by username
ApplicationUser user = UserManager.FindByName(username);
// get by user id
ApplicationUser user = db.Users.Find(id);
// get current user
ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext()
.GetUserManager<ApplicationUserManager>().FindById(Convert
.ToInt32(System.Web.HttpContext.Current.User.Identity.GetUserId()));
// and some other useful methods
if (user == null)
{
// creating user
user = new ApplicationUser();
// fill in the user properties
user.UserName = "johnny";
user.Name = "Johnny English";
//...
var result = UserManager.Create(user);
// set default user group and roles
var defaultGroup = "xxxx-yyyy-zzzz-tttt"; // Id of the ApplicationGroup
groupManager.SetUserGroups(user.Id, new string[] { defaultGroup });
groupManager.SetGroupRoles(newGroup.Id, new string[] { role.Name });
}
}
希望这可以帮助。
推荐阅读
- amazon-web-services - AWS SNS 订阅与 lambda 函数的触发器?
- html - 平滑悬停动画在随机网站上有效,但在我的网站上无效,为什么?
- swift - Firebase 数据库不会快速存储(写入)数据
- python - 使用 Python 进行异步和等待
- swift - 使用常量设置 UILabel 的文本
- python - 尝试在 Python 中反转输出
- google-sheets - 谷歌表格数组公式sumifs重复数组中所有值的第一个值
- python - 从验证码中删除曲线
- javascript - 使用 JSX 时必须在范围内获取“React”
- ruby-on-rails - rake 资产预编译时出现 capistrano 3 错误