从自定义用户标识类获取UserId
本文关键字:获取 UserId 用户标识 自定义 | 更新日期: 2023-09-27 17:57:29
我正试图从我创建的自定义UserIdentity类访问UserId属性,但访问它的语法有问题。
这是类别:
using System.Security.Principal;
using System.Web.Security;
namespace Rework.Models
{
public class UserIdentity : IIdentity, IPrincipal
{
private readonly FormsAuthenticationTicket _ticket;
public UserIdentity(FormsAuthenticationTicket ticket)
{
_ticket = ticket;
}
public string AuthenticationType
{
get { return "User"; }
}
public bool IsAuthenticated
{
get { return true; }
}
public string Name
{
get { return _ticket.Name; }
}
public string UserId
{
get { return _ticket.UserData; }
}
public bool IsInRole(string role)
{
return Roles.IsUserInRole(role);
}
public IIdentity Identity
{
get { return this; }
}
}
}
Here is the code block in which I try to access the UserId property and put its value into the id variable.
using (UsersContext db = new UsersContext())
{
if (db.Users.Any(u => u.UserName != txtUsername.Text))
{
var newUserObj = new User { UserName = txtUsername.Text };
UsersContext newUser = new UsersContext();
newUser.AddUser(newUserObj);
}
if (!User.IsInRole("Member") || !User.IsInRole("Admin") || !User.IsInRole("SuperAdmin"))
{
var id = //This is where I need to access the prop
db.AddUserRole(new UserRole {UserId = id, RoleId = 3});
}
}
使用内置类,您可以执行Users.Identity.GetId();,但我不太确定如何使用自定义类。任何帮助都将不胜感激!
我认为以下代码是错误的:
if (db.Users.Any(u => u.UserName != txtUsername.Text))
{
var newUserObj = new User { UserName = txtUsername.Text };
UsersContext newUser = new UsersContext();
newUser.AddUser(newUserObj);
}
db.Users.Any(u => u.UserName != txtUsername.Text)
部分让我有点烦。基本上,您正在检查数据库中是否有任何用户的用户名与输入的用户名不同。如果你得到了一些结果,你就创建了一个新用户。这在实际中总是存在的,因为总会有一个用户的用户名与输入的用户名不同(除非没有用户)。也许我只是误读了这个条件,但它仍然让我有点困惑。)
您应该将其重写为:
var user = db.Users.SingleOrDefault(u => u.UserName == txtUsername.Text);
if (user == null)
{
var user = new User { UserName = txtUsername.Text };
//UsersContext newUser = new UsersContext(); // Not sure why you need new context, since you are already inside UsersContent
db.AddUser(user);
db.SaveChanges(); // only neccessary if User's Id is identity to get newly created Id.
}
之后,您可以访问user.UserId
或user.Id
属性以获取用户(当前或新)的Id