.net user.identity.getuserid=null,但用户名有效
我现在花了好几天的时间来解决这个问题。 使用user.identity.name或user.identity.username,我在登录后获得了正确的值 但是当我想知道用户ID时,我得到一个空值 一切正常我可以登录我可以看到用户名和user.identity.name 但是当我想看到我的用户ID时,我会得到一个空值,有人知道问题出在哪里 我的用户类Gebruiker==user.net user.identity.getuserid=null,但用户名有效,.net,asp.net-mvc,authentication,identity,.net,Asp.net Mvc,Authentication,Identity,我现在花了好几天的时间来解决这个问题。 使用user.identity.name或user.identity.username,我在登录后获得了正确的值 但是当我想知道用户ID时,我得到一个空值 一切正常我可以登录我可以看到用户名和user.identity.name 但是当我想看到我的用户ID时,我会得到一个空值,有人知道问题出在哪里 我的用户类Gebruiker==user { [DataContract] public partial class Gebruiker
{
[DataContract]
public partial class Gebruiker
{
[DataMember]
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
// public short GebruikerId { get; set; }
public int GebruikerId { get; set; }
// [ForeignKey("Role")]
// public long RoleId { get; set; }
// [ForeignKey("klanten")]
// public long KlantId { get; set; }
[DataMember]
[Required(ErrorMessage = "gebruikersnaam is vereist")]
[Remote("doesUserNameExist", "Gebruiker", HttpMethod = "POST", ErrorMessage = "gebruiker bestaat alreeds")]
public string Gebruikersnaam { get; set; }
[DataMember]
[Required(ErrorMessage = "Wachtword is vereist")]
public string WachtwoordHash { get; set; }
[DataMember]
[Required(ErrorMessage = "Naam is verplicht")]
public string Naam { get; set; }
[DataMember]
public string Voornaam { get; set; }
[DataMember]
[Required(ErrorMessage = "Een Email is verplicht")]
[DataType(DataType.EmailAddress, ErrorMessage = "Het emailadres is niet geldig")]
public string Email { get; set; }
// [Required]
// public ICollection<Role> Roles { get; set; }
public virtual ICollection<GebruikerRoles> GebruikerRoles { get; set; }
public virtual ICollection<Reservatie> Reservatie { get; set; }
}
{
[数据合同]
公共部分类Gebruiker
{
[数据成员]
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
//公共短GebruikerId{get;set;}
public int GebruikerId{get;set;}
//[外键(“角色”)]
//公共长RoleId{get;set;}
//[外键(“klanten”)]
//公共长KlantId{get;set;}
[数据成员]
[必需(ErrorMessage=“gebruikersnaam is vereist”)]
[远程(“doesUserNameExist”、“Gebruiker”、HttpMethod=“POST”、ErrorMessage=“Gebruiker bestaat alreeds”)]
公共字符串Gebruikersnaam{get;set;}
[数据成员]
[必需(ErrorMessage=“Wachtword is vereist”)]
公共字符串WachtwoordHash{get;set;}
[数据成员]
[必需(ErrorMessage=“Naam是verplicht”)]
公共字符串Naam{get;set;}
[数据成员]
公共字符串Voornaam{get;set;}
[数据成员]
[必需(ErrorMessage=“Een Email is verplicht”)]
[数据类型(DataType.EmailAddress,ErrorMessage=“Het EmailAddress is niet geldig”)]
公共字符串电子邮件{get;set;}
//[必需]
//公共ICollection角色{get;set;}
公共虚拟ICollection gebruikeroles{get;set;}
公共虚拟ICollection保留{get;set;}
}
文章
public class Artikel
{
[Key]
[Required]
// [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public long ArtikelId { get; set; }
[ForeignKey("Categorie")]
[Required(ErrorMessage = "U bent verplict een categorie te selecteren")]
public long CategorieId { get; set; }
[StringLength(125, ErrorMessage = "max 125 tekens")]
public string Naam { get; set; }
public string Beschrijving { get; set; }
public int max_uitleentermijn { get; set; }
[StringLength(13,ErrorMessage = "Ean-13 Barcode kan max 13 tekens bevatten")]
public string Barcode{get;set;}
public string FiguurURL { get; set; }
// public ImageMap Image { get; set; }
public byte[] byteImage { get; set; }
public virtual Categorie Categorie { get; set; }
public virtual ICollection<ReservatieDetail> ReservatieDetail { get; set; }
}
}
公共类Artikel
{
[关键]
[必需]
//[数据库生成(DatabaseGeneratedOption.Computed)]
公共长ArtikelId{get;set;}
[外汇(“分类”)]
[必需(ErrorMessage=“U bent verplict een category te selecter”)]
公共长分类ID{get;set;}
[StringLength(125,ErrorMessage=“最大125 tekens”)]
公共字符串Naam{get;set;}
公共字符串Beschrijving{get;set;}
public int max_uitleentermijn{get;set;}
[StringLength(13,ErrorMessage=“Ean-13条码kan max 13 tekens bevatten”)]
公共字符串条形码{get;set;}
公共字符串figuurrl{get;set;}
//公共ImageMap图像{get;set;}
公共字节[]字节图像{get;set;}
公共虚拟分类分类{get;set;}
公共虚拟ICollection ReservatieDetail{get;set;}
}
}
类别
public class Categorie
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long CategorieId { get; set; }
[Required(ErrorMessage = "Categorie Naam is verplicht")]
public string Naam { get; set; }
public string Beschrijving { get; set; }
public virtual Opleiding Opleiding { get; set; }
public List<Artikel> Artikel1 { get; set; }
}
}
公共类分类
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共长分类ID{get;set;}
[必需(ErrorMessage=“Categorie Naam is verplicht”)]
公共字符串Naam{get;set;}
公共字符串Beschrijving{get;set;}
公共虚拟Opleiding Opleiding{get;set;}
公共列表Artikel1{get;set;}
}
}
用户角色
public class GebruikerRoles
{
[Key]
public int UserRoleId { get; set; }
public int GebruikerId { get; set; }
public long RoleId { get; set; }
public virtual Role Role { get; set; }
}
}
public class Opleiding
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long OpleidingId { get; set; }
public string OpleidingNaam { get; set; }
// public string Naam { get; set; }
// public string Voornaam { get; set; }
public List<Categorie> Categorie1 { get; set; }
// public List<Klant> klanten { get; set; }
//public List<Gebruiker> gebruiker { get; set; }
// public List<Leverancier> Leveranciers { get; set; }
}
公共类Gebruikeroles
{
[关键]
public int UserRoleId{get;set;}
public int GebruikerId{get;set;}
公共长RoleId{get;set;}
公共虚拟角色{get;set;}
}
}
公开课
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共长OpleidingId{get;set;}
公共字符串OpleidingNaam{get;set;}
//公共字符串Naam{get;set;}
//公共字符串Voornaam{get;set;}
公共列表Categorie1{get;set;}
//公共列表klanten{get;set;}
//公共列表gebruiker{get;set;}
//公共列表杠杆器{get;set;}
}
保留地
public class Reservatie
{
/* public Reservatie()
{
this.ReservatieDetail = new HashSet<ReservatieDetail>();
*/// }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int reservatie_id { get; set; }
public Guid GebruikerId { get; set; }
public long ArtikelId { get; set; }
public System.DateTime Datum { get; set; }
public DateTime startdatum { get; set; }
public DateTime einddatum { get; set; }
public virtual Gebruiker Gebruiker { get; set; }
public virtual Artikel Artikel { get; set; }
// public virtual ICollection<ReservatieDetail> ReservatieDetail { get; set; }
}
}
公共类保留
{
/*公共预订()
{
this.ReservatieDetail=新HashSet();
*/// }
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int reservatie_id{get;set;}
公共Guid GebruikerId{get;set;}
公共长ArtikelId{get;set;}
public System.DateTime数据{get;set;}
公共日期时间起始日期{get;set;}
公共日期时间einddatum{get;set;}
公共虚拟Gebruiker Gebruiker{get;set;}
公共虚拟Artikel Artikel{get;set;}
//公共虚拟ICollection ReservatieDetail{get;set;}
}
}
角色
公共类角色
{
[关键]
公共长RoleId{get;set;}
公共字符串Naam{get;set;}
//公共ICollection Gebruikers{get;set;}
}
我的存储库类
public class GebruikerRepository
{
private ReserveringContext context;
public GebruikerRepository(ReserveringContext c)
{
this.context = c;
}
public ICollection<Gebruiker> GetAllUsersWithRoles()
{
return context.gebruiker
.Include("Roles")
.OrderBy(u => u.Naam)
.ThenBy(u => u.Voornaam)
.ToList();
}
public Gebruiker GetUserByUsernameAndPassword(string Gebruikersnaam, string wachtwoord)
{
//wachtwoord omzetten naar md5
string hashedpass = FormsAuthentication.HashPasswordForStoringInConfigFile(wachtwoord, "md5");
Gebruiker user = context.gebruiker
.Include("GebruikerRoles")
.Where(u => u.Gebruikersnaam.ToUpper() == Gebruikersnaam.ToUpper() &&
u.WachtwoordHash == hashedpass)
.FirstOrDefault();
return user;
}
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
string cookieName = FormsAuthentication.FormsCookieName;
if (!filterContext.HttpContext.User.Identity.IsAuthenticated ||
filterContext.HttpContext.Request.Cookies == null ||
filterContext.HttpContext.Request.Cookies[cookieName] == null
)
{
HandleUnauthorizedRequest(filterContext);
return;
}
var authCookie = filterContext.HttpContext.Request.Cookies[cookieName];
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(',');
var userIdentity = new GenericIdentity(authTicket.Name);
var userPrincipal = new GenericPrincipal(userIdentity, roles);
filterContext.HttpContext.User = userPrincipal;
base.OnAuthorization(filterContext);
}
}
}
公共类GebruikerRepository
{
私有ReserveringContext;
公共GebruikerRepository(保留上下文c)
{
this.context=c;
}
公共ICollection GetAllUsersWithRoles()
{
return context.gebruiker
.包括(“角色”)
.OrderBy(u=>u.Naam)
.ThenBy(u=>u.Voornaam)
.ToList();
}
public Gebruiker getuserbyusername和password(字符串Gebruikersnaam,字符串wachtwoord)
{
//wachtwoord omzetten naar md5
string hashedpass=FormsAuthentication.HashPasswordForStoringInConfigFile(wachtwoord,“md5”);
Gebruiker user=context.Gebruiker
.包括(“Gebruikeroles”)
.Where(u=>u.Gebruikersnaam.ToUpper()==Gebruikersnaam.ToUpper())&&
u、 WachtwoordHash==hashedpass)
.FirstOrDefault();
返回用户;
}
}
[属性]
public class GebruikerRepository
{
private ReserveringContext context;
public GebruikerRepository(ReserveringContext c)
{
this.context = c;
}
public ICollection<Gebruiker> GetAllUsersWithRoles()
{
return context.gebruiker
.Include("Roles")
.OrderBy(u => u.Naam)
.ThenBy(u => u.Voornaam)
.ToList();
}
public Gebruiker GetUserByUsernameAndPassword(string Gebruikersnaam, string wachtwoord)
{
//wachtwoord omzetten naar md5
string hashedpass = FormsAuthentication.HashPasswordForStoringInConfigFile(wachtwoord, "md5");
Gebruiker user = context.gebruiker
.Include("GebruikerRoles")
.Where(u => u.Gebruikersnaam.ToUpper() == Gebruikersnaam.ToUpper() &&
u.WachtwoordHash == hashedpass)
.FirstOrDefault();
return user;
}
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
string cookieName = FormsAuthentication.FormsCookieName;
if (!filterContext.HttpContext.User.Identity.IsAuthenticated ||
filterContext.HttpContext.Request.Cookies == null ||
filterContext.HttpContext.Request.Cookies[cookieName] == null
)
{
HandleUnauthorizedRequest(filterContext);
return;
}
var authCookie = filterContext.HttpContext.Request.Cookies[cookieName];
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(',');
var userIdentity = new GenericIdentity(authTicket.Name);
var userPrincipal = new GenericPrincipal(userIdentity, roles);
filterContext.HttpContext.User = userPrincipal;
base.OnAuthorization(filterContext);
}
}
}
public class ReserveringContext : DbContext
{
public DbSet<Artikel> Artikel { get; set; }
public DbSet<Reservatie> Reservatie { get; set; }
public DbSet<ReservatieDetail> ReservatieDetail { get; set; }
public DbSet<Categorie> Categorie { get; set; }
public DbSet<Gebruiker> gebruiker { get; set; }
public DbSet<Role> Role { get; set; }
public DbSet<Opleiding> Opleiding { get; set; }
public DbSet<GebruikerRoles> GebruikerRole { get; set; }
}
public ActionResult Index()
{
var test = User.Identity.GetUserName();
var test2 = User.Identity.GetUserId();
var test3 = User.IsInRole("Administrator");
var test4 = Roles.IsUserInRole("Administrator");
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
return View();
}
public ActionResult Login()
{
LoginVM model = new LoginVM();
return View(model);
}
[HttpPost]
public ActionResult Login(LoginVM model, string returnurl)
{
if (ModelState.IsValid)
{
Gebruiker logged_in_user = gebruikerrepository.GetUserByUsernameAndPassword(model.Gebruikersnaam, model.wachtwoord);
// var newuser = gebruikerrepository.GetUserByUsernameAndPassword(model.Gebruikersnaam, model.wachtwoord);
if (logged_in_user != null)
{
IEnumerable<string> rolenames = logged_in_user.GebruikerRoles.Select<GebruikerRoles, string>(r => r.Role.Naam);
string rolesstring = string.Join(";", rolenames.ToArray());
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
logged_in_user.Gebruikersnaam,
DateTime.Now,
DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
model.RememberMe,
rolesstring
);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
var authcookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(authcookie);
if (returnurl != null)
{
return Redirect(returnurl);
}
else
{
TempData["loginBoodschap"] = "Welkom, <b>" + logged_in_user.Gebruikersnaam + "</b>.<br />U bent nu ingelogd.";
User.Identity.GetUserId();
string gebruiker;
Gebruiker k = new Gebruiker();
gebruiker = model.Gebruikersnaam;
// k = JsonConvert.DeserializeObject<Gebruiker>(model.Gebruikersnaam);
var json = JsonConvert.SerializeObject(logged_in_user.GebruikerId);
if (k != null)
{
HttpCookie newCookie = new HttpCookie("shop", json);
newCookie.Value = json;
DateTime now = DateTime.Now;
newCookie.Expires = now.AddMinutes(6000);
Response.Cookies.Add(newCookie);
TempData["boodschap"] = "U kunt nu starten met shoppen";
return RedirectToAction("Index", "Home");
}
else
{
TempData["boodschap"] = "Verkeerde gebruikersnaam en/of wachtwoord";
return RedirectToAction("Index", "Home");
}
}
}
else
{
ModelState.AddModelError("", "De ingevoerde gebruikersnaam of wachtwoord is ongeldig");
return View(model);
}
}
else
{
//onvolledige gegevens, toon formulier opnieuw
return View(model);
}
}
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id));