Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net user.identity.getuserid=null,但用户名有效_.net_Asp.net Mvc_Authentication_Identity - Fatal编程技术网

.net user.identity.getuserid=null,但用户名有效

.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

我现在花了好几天的时间来解决这个问题。 使用user.identity.name或user.identity.username,我在登录后获得了正确的值

但是当我想知道用户ID时,我得到一个空值

一切正常我可以登录我可以看到用户名和user.identity.name 但是当我想看到我的用户ID时,我会得到一个空值,有人知道问题出在哪里

我的用户类Gebruiker==user

{
    [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));