有没有人想出了一个成功的嘲弄解决方案UserManager和RoleManager?我整天都在靠墙打我的头.我想要做的就是模拟对象以使用内存集合而不是命中Entity Framework数据存储.我已经浏览了互联网并尝试了几种使用MOQ的不同方法.
我的印象是新东西更容易测试.我错过了什么吗?
我是ASP.NET MVC的新手,我一直在开发一个带有个人用户身份验证的MVC 5应用程序.在做我的应用程序时,我一直在做分层模式,比如分离模型层,DAL层,Repos等等.但是现在在MVC 5中,我希望能够使用他们称之为Identity的用户和角色管理和身份验证,然后仍然有我的应用程序的分层结构,因为现在似乎Identity与MVC项目本身,其中的用户和角色模型以及上下文相结合.
我现在在我的应用程序中所做的是我在MVC项目(在单独的文件夹中)中拥有所有我应该要分离的层,如我的DAL,UnitOfWork,Repos,其他模型等,只是为了使它工作,现在.我知道这不是正确的做法.
所以,任何人都可以向我指出一些关于这个的好例子或文章,或者直接解释它是否可能以及如何?Google对此并不友好.谢谢!
当我们调用AccountApiController.Register()方法时,为什么会发生这种情况?
"消息":"发生错误.",
"ExceptionMessage":"在创建模型时不能使用上下文.如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常.请注意DbContext的实例成员和相关的类不保证是线程安全的.",
"ExceptionType": "System.InvalidOperationException"
"堆栈跟踪":"
在System.Web.Http.ApiController.d__1.MoveNext()
---从抛出异常的先前位置开始的堆栈跟踪结束
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification(任务>任务)
在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()"
默认情况下,ASP.NET Core Identity的密码策略至少需要一个特殊字符,一个大写字母,一个数字,......
我该如何更改此限制?
文档中没有任何内容(https://docs.asp.net/en/latest/security/authentication/identity.html)
我尝试覆盖Identity的用户管理器,但我没有看到哪个方法管理密码策略.
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(
DbContextOptions<SecurityDbContext> options,
IServiceProvider services,
IHttpContextAccessor contextAccessor,
ILogger<UserManager<ApplicationUser>> logger)
: base(
new UserStore<ApplicationUser>(new SecurityDbContext(contextAccessor)),
new CustomOptions(),
new PasswordHasher<ApplicationUser>(),
new UserValidator<ApplicationUser>[] { new UserValidator<ApplicationUser>() },
new PasswordValidator[] { new PasswordValidator() },
new UpperInvariantLookupNormalizer(),
new IdentityErrorDescriber(),
services,
logger
// , contextAccessor
)
{
}
public class PasswordValidator : IPasswordValidator<ApplicationUser>
{
public Task<IdentityResult> ValidateAsync(UserManager<ApplicationUser> manager, ApplicationUser user, string password)
{
return Task.Run(() =>
{
if (password.Length >= 4) …Run Code Online (Sandbox Code Playgroud) 我是ASP.Net MVC的新手,现在尝试使用内置的用户登录功能.我可以在注册视图中注册用户.如果我尝试使用创建的用户登录,这也有效.我被重定向到母版页.
但是我无法获得当前用户的UserID.我在HomeController和AccountController中尝试了我的代码,但两者都没有用.第一行中的语句返回null.
var userID = User.Identity.GetUserId();
if (!string.IsNullOrEmpty(userID))
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create()));
var currentUser = manager.FindById(User.Identity.GetUserId());
}
Run Code Online (Sandbox Code Playgroud)
在获取UserID之前,我是否需要做其他事情?
编辑:这个问题已经过时了
在我问这个时,身份框架是一个移动目标.作者改变了很多东西,他们将几件事分开,使事情变得更容易.
看看github上的Asp.NET Identity Sample项目.
我正在创建一个需要用户管理的小应用程序.不允许注册,而是有超级用户将创建和修改登录信息.
我正在使用新的ASP.NET身份会员系统,当然,创建用户和添加角色非常简单直观.
现在,我的问题:如何使用生成的AccountController类使用的AuthenticationIdentityManager类获取用户列表?我找不到从我的控制器访问用户列表的方法.
(顺便说一句,新名称"身份"对某些人来说可能听起来很棒,但搜索却很痛苦.)
编辑:如果我尝试这样做
ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception
Run Code Online (Sandbox Code Playgroud)
我得到一个例外Invalid column name 'Discriminator'.ApplicationDbContext的定义由新的应用程序向导自动生成:
using Microsoft.AspNet.Identity.EntityFramework;
namespace Cobranzas.Models
{
public class ApplicationUser : User
{
}
public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
{
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的猜测是,Discriminator列告诉分开ApplicationUser的User.但是,它在我的数据库中不存在(由应用程序自动创建).
对于表单身份验证,我在web.config中使用了它(请注意域属性):
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
如何在Mvc 5中为新的ASP.NET Identity Framework配置子域之间的单点登录?
更多信息:
我正在创建一个多租户应用程序.每个客户端都在子域上:
client1.myapp.com
client2.myapp.com
我希望用户能够登录client1.myapp.com然后转到client2.myapp.com并仍然登录.使用表单身份验证很容易.我正在试图弄清楚如何使用新的Identity Framework来实现它.
编辑
这是最终为我工作的代码:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myapp.com"
});
Run Code Online (Sandbox Code Playgroud) 如何在新的ASP.NET身份系统(1.0)中添加角色?有一个UserStore班级,但没有RoleStore班级.
我找不到关于这个问题的任何文件.
我正在尝试使用此链接中的方法将Identity模型移动到类库:
问题1:似乎继续使用Website项目的连接字符串.我通过在类库中指定完整的连接字符串来克服它.我可以使IdentityDbContext使用类库的连接字符串吗?
问题2:由于问题1,如果我从网站项目中删除实体框架.它会给出以下错误:它正在网站项目中寻找EF的SqlClient.
EntityFramework.dll中出现"System.InvalidOperationException"类型的异常,但未在用户代码中处理
附加信息:没有为ADO.NET提供程序找到具有不变名称"System.Data.SqlClient"的实体框架提供程序.确保提供程序已在应用程序配置文件的"entityFramework"部分中注册.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.
其他解决方案是受欢迎的,只要它省略了网站项目中的所有数据访问层引用,如EF.
我计划在ASP.NET MVC应用程序中使用ASP.NET Identity 2.0进行身份验证和授权.
参考以下链接
使用Owin的ASP.NET Web API 2中的JSON Web Token
我能够为有效用户创建访问令牌(JWT),即,当用户登录到应用程序时,我将使用名称和密码验证用户,然后我将为该有效用户发出JSON Web令牌.
现在,我在一些文章中读到,我们需要在标头中为每个请求传递承载令牌,以验证用户的身份验证.在MVC中,我们将为需要保护的方法提供Authorize属性,如下所示...
public class UserController : BaseHRAppController
{
[Authorize]
public ActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
如何告诉我的MVC应用程序使用JWT验证用户?
每当用户尝试使用authorize属性访问该方法时,我想让我的MVC应用程序使用JWT验证用户.由于我将在许多页面中使用AJAX调用来访问MVC控制器中存在的方法,因此我认为在每个AJAX请求上传递令牌都不合适.我需要帮助以在MVC应用程序中使用ASP.NET标识以有效的方式完成身份验证和授权.
目前,我不知道如何在MVC应用程序中使用此JWT令牌进行身份验证和授权.
c# authentication authorization asp.net-mvc-4 asp.net-identity