标签: asp.net-identity-2

电子邮件不能为 null 或为空。MVC 5,身份 2.0.0

我刚刚将我的代码从 Identity 1.0.0 完全迁移到 2.0.0 & 由于某种原因,我遇到了一个奇怪的问题。尝试创建用户时,失败。错误是:电子邮件不能为空或为空。(当然,我将有效的电子邮件插入到该属性中)。请帮忙..

控制器.cs

        [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {            
        if (ModelState.IsValid)
        {         
            var user = new ApplicationUser()
            {
                UserName = model.UserName,
                contact_firstname = model.contact_firstname,
                contact_lastname = model.contact_lastname,
                Email = model.Email,
                PhoneNumber = model.PhoneNumber,
                contact_phone2 = model.contact_phone2,
                street = model.street,
                city = model.city,
                country = model.country,
                state = model.state,
                postcode = model.postcode,
                longitude = model.longitude,
                latitude = model.latitude
            };

            var result = await UserManager.CreateAsync(user, model.Password);
            //HERE IS THE ERROR
            if (result.Succeeded)
            {                    
                string …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-5 asp.net-identity-2

5
推荐指数
1
解决办法
5758
查看次数

asp.net mvc identity 2 运行不同项目的两个实例

我尝试运行两个安装了 Identity 2.0 的新 ASP.NET MVC5 项目的 2 个实例。这两个应用程序都是使用默认的 MVC 模板创建的,并设置为单独的身份验证,无需任何代码修改。

我在 Visual Studio 2013 RC2 中运行了第一个应用程序,并使用 Web 应用程序注册界面创建了一个虚拟用户帐户。完成上述步骤后,Entity 框架将使用虚拟用户登录信息创建一个虚拟数据库。然后我登录第一个应用程序,登录信息显示在主页的标题上。

接下来我在visual studio的下一个实例中运行第二个mvc应用程序,当网页启动时,我很惊讶我已经登录到没有任何数据库的第二个应用程序。我不知道怎么了。在 _LoginPartial.cshtml 下,以下代码检查用户是否已通过身份验证并显示注销链接。@if (Request.IsAuthenticated)

如果在不同的浏览器上运行相同的测试,则不会出现问题。我猜想与 cookie 或浏览器缓存有关。我可以知道如何避免上述情况的发生吗?还是应该是正常的?

asp.net-identity-2

5
推荐指数
1
解决办法
935
查看次数

如何在多层解决方案中实现ASP.NET Identity 2.0

我正在寻找关于如何在多层环境中实现ASP.NET身份2的一些指导.我有一个物理上分离的表示和业务层,但我在Identity中看到的所有示例和示例代码都涉及从表示层到DB使用EF.我没有直接点击数据库,而是将一组WCF服务作为我的业务层(非常典型,我敢肯定).我很擅长在底部使用EF作为ORM,但仅限于Web服务,而不是表示层.

我假设最直接的方法是拥有IUser*Store接口的自定义实现,然后这些实现将调用后端Web服务.

这是推荐的方法,还是有不同的方法?这似乎是合适的,因为这似乎是实现自己的自定义用户存储的推荐方法,但是必须实现所有这些接口似乎相当沉重(我知道大多数是可选的,但我需要大部分接口).

asp.net wcf asp.net-identity-2

5
推荐指数
0
解决办法
265
查看次数

强制其他用户使用ASP.NET Identity 2.1.0刷新其声明

我正在使用Asp.NET Identity 2.1.0,我存储了Accounts一个User可以访问的列表,作为声明.该ClaimsIdentity时生成User迹象:

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

    // Add Claims concerning Account
    userIdentity.AddClaim(new Claim("AccountList", SerializedListOfAccounts));

    return userIdentity;
}
Run Code Online (Sandbox Code Playgroud)

假设管理员撤销User A对特定帐户的访问权限.我User A该如何强制再生ClaimsIdentity呢?请记住,它不是在上下文中User A.我不想等到cookie过期(并ClaimsIdentity自动生成一个新的.

可能吗?有没有办法告诉服务器将User Acookie视为无效并强制它重新生成?

我想要这种行为的原因是创建一个自定义AuthorizeAttribute,我可以放在我的控制器上,检查Claims是否User有访问权限,以避免额外的数据库往返.

asp.net asp.net-mvc-5 asp.net-identity asp.net-identity-2

5
推荐指数
1
解决办法
1045
查看次数

每个页面上的 ASP.NET MVC 自定义用户字段

背景: 我正在构建越来越多的 Web 应用程序,其中设计者/模板制作者决定添加“个人资料图片”和一些其他用户相关数据,当然只有在有人登录时才添加。

与大多数 ASP.NET MVC 开发人员一样,我使用视图模型来提供 razor 布局,其中包含我需要显示的信息,这些信息来自存储库等。

通过使用可以很容易地显示用户名

HttpContext.Current.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

如果我想在这些页面上显示我的支持数据存储中保存的信息,该怎么办?ApplicationUser 类中的自定义字段,例如业务部门名称或个人资料图片 CDN url。

(为了简单起见,我们假设我将身份框架与包含我的应用程序用户的实体框架(SQL 数据库)一起使用)

问题

你如何解决这个问题:

  1. 不污染视图模型/控制器树(例如构建 BaseViewModel 或 BaseController 填充/提供此信息?
  2. 无需在每个页面请求这些详细信息时往返数据库?
  3. 如果用户未登录,则不查询数据库?
  4. 当您无法使用 SESSION 数据时(因为我的应用程序通常在多个 Azure 实例上进行扩展 -请阅读此处为什么不可能这样做- 我对 SQL 缓存或 Redis 缓存不感兴趣。

我考虑过使用新的视图模型的部分 - 但这仍然会在每次页面加载时往返 SQL 数据库。会话数据目前是安全的,但是当在天蓝色中扩展时,这也不是一种方法。知道我最好的选择是什么吗?

太长了;

如果用户登录(匿名访问=允许),我想在应用程序的每个页面上显示用户配置文件信息(ApplicationUser)。如何显示此信息而不在每个页面请求都查询数据库?如果没有 Session 类,我该如何做到这一点?在不构建基类的情况下如何做到这一点?

asp.net asp.net-mvc razor asp.net-identity-2

5
推荐指数
1
解决办法
2884
查看次数

ASP.NET Identity2 - 如何使用AllowAnonymous控制器获取用户ID?

我想将查看可由授权和匿名用户访问的网页的数据库(日期和用户)保存在数据库中。有没有一种方法可以使操作同时使用这两种类型,因为如果操作是[AllowAnonymous],则用户未经身份验证,我无法检索用户 ID,如果操作是[Authorize]匿名用户,则无法访问该页面。

[HttpGet]
[Route("{id}/Detail")]
[AllowAnonymous]
[ResponseType(typeof(JsonArticleDetail))]
public IHttpActionResult GetArticle(int id)
{
    ...
    var entity = this.DbContext.Articles.Find(id);
    var applicationUserId = User.Identity.IsAuthenticated ? User.Identity.GetUserId() : null;

    entity.ArticleViews.Add(new ArticleView
    {
        ViewedOn = DateTime.UtcNow,
        ApplicationUserId = applicationUserId
    });

    this.DbContext.SaveChanges();
    return Ok(article);
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc-5 asp.net-identity-2

5
推荐指数
1
解决办法
1562
查看次数

身份MVC5中的权限提升和会话劫持

我在我的应用程序中使用asp.net identity 2.0进行身份验证(Owin中间件).会话劫持:当我登录身份创建AspNet.ApplicationCookie.然后,我复制了AspNet.ApplicationCookie值.然后我从应用程序注销.登出后,我手动创建cookie(AspNet.ApplicationCookie)并进行刷新它重定向我回家页.

权限提升:同时我以用户AI身份登录(AspNet.ApplicationCookie)登录了他的cookie并且我登出了.我以用户BI身份登录后正在编辑用户B Cookie并粘贴用户A cookie并保存.刷新浏览器后,我可以获得UserA访问和身份验证.

我正在清除所有会话并删除所有cookie当我退出.Even Asp.Net身份(Owin)每次都会生成新的AspNet.ApplicationCookie.但它仍然接受旧的cookie并给我一个访问权限.我不会知道为什么吗?任何人都可以告诉我如何在注销后使旧的AspNet.ApplicationCookie无效.这是我在Startup.Auth.cs中的代码

 public void ConfigureAuth(IAppBuilder app)
    {
        // Enable the application to use a cookie to store information for the signed in user
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login")
        });
        // Use a cookie to temporarily store information about a user logging in with a third party login provider
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);


    }
Run Code Online (Sandbox Code Playgroud)

//这是注销码

    public ActionResult LogOff ( )
    {
        //Delete all cookies while user log out
        string[] myCookies = Request.Cookies.AllKeys;
        foreach …
Run Code Online (Sandbox Code Playgroud)

c# asp.net cookies owin asp.net-identity-2

5
推荐指数
1
解决办法
876
查看次数

将 ASP.net Identity 2.0 连接到已经存在的数据库

我正在使用 vs2013 并使用 asp.net mvc 5 创建我的 Web 应用程序。为了进行个人身份验证,我正在使用Identity 2.0
当我创建我的 Entitymodel.edmx 时,它会自动在 web.config 中为我的数据库生成新的连接字符串,如下所示:

<add name="myEntities" connectionString="metadata=res://*/Models.mEntity.csdl|res://*/Models.mEntity.ssdl|res://*/Models.mEntity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Shop.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

我想Identity使用代码优先方法来创建数据库并连接到另一个连接字符串(DefaultConnection),例如:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-testauthentication-20151116011628.mdf;Initial Catalog=aspnet-testauthentication-20151116011628;Integrated Security=True"
      providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

因此,当我第一次运行项目时,它会创建新的.mdf文件,名称为

aspnet-testauthentication-20151116011628.mdf

并在其中创建表。但我想要的是让Identity连接到我已经创建的名为 : Shop.mdf 的数据库并在其中创建它的表。所以我把我的连接字符串名称ApplicationDbContext放在 IdentityModel.cs 的类中,如下所示:

public ApplicationDbContext()
        : base("myEntities", throwIfV1Schema: false)
{
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

实体类型 ApplicationUser 不是当前上下文模型的一部分。

那么这样做的适当和正确的方法是什么?

多谢

更新:
我在现有数据库和DefaultConnection 中使用完全相同的名称创建了 Identity 表以连接到现有数据库,现在我收到此错误:

无法创建文件 'c:\users\mohamad\documents\visual studio 2013\Projects\Shop\Shop\App_Data\Shop.mdf',因为它已经存在。更改文件路径或文件名,然后重试该操作。创建数据库失败。无法创建列出的某些文件名。

为什么当有数据库甚至表时,身份尝试创建数据库?

解决方案:
第 1 …

c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2

5
推荐指数
1
解决办法
1012
查看次数

具有Identity 2.2.1中的角色列表的用户列表

所以我一直在搜索Google和SO.这个问题的感觉已被多次询问,但没有答案对我有帮助,但我觉得我已经接近了.但是,我是LINQ和Lambda的新手,并且没有做我想做的事情的知识.

期望的结果

User                   Roles
-----------------------------------------
John                   Admin
Jane                   Staff, HR, Payroll
MyCoolUserName         User
Run Code Online (Sandbox Code Playgroud)

我非常接近这篇文章这篇文章.这是我到目前为止所得到的.

视图模型:

public class UsersViewModel {
    [Display(Name = "User")]
    public ApplicationUser User { get; set; }

    [Display(Name = "Roles")]
    public string Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

试验#1

此解决方案返回角色的空白,我不得不将其添加到我的web.config文件中:<roleManager enabled="true" />

public class UsersController : Controller {
    public async Task Index() {
        var allUsers = await db.Users.ToListAsync();
        var users = new List();
        foreach (var user in allUsers) {
            String[] …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda asp.net-identity asp.net-identity-2

5
推荐指数
1
解决办法
1843
查看次数

手动插入到 Identity Framework AspNetUsers 表中

我正在使用身份框架实现一个新的授权 API。但是,我们有我们的用户表,我正在尝试将用户信息添加到 AspNetUsers 表中。

问题

  1. 如何生成 GUID
  2. 如何将当前的纯文本密码转换为 PasswordHash
  3. 如何/如何在 SecurityStamp 列中添加数据。

sql-server asp.net-identity-2

5
推荐指数
1
解决办法
2545
查看次数