我正在使用带有OpenIDDict的ASP.NET MVC Core。我正在使用带有cookie身份验证的视图和用于OpenIDDict的JWT。除了以下场景外,一切都很完美:
更改身份以首先向用户发送确认电子邮件以确认其电子邮件地址。用户通过电子邮件获取链接并单击它。然后他们登录。简单。与此同时,他们无法访问任何页面。
但是我注意到,使用邮递员,他们可以通过OpenIDDict通过APi'S访问解决方案。他们仍然获得授权。当他们获得授权时,他们可以访问API。
刚刚写完这篇文章我已经放弃了大脑,我可以在交换行动中简单地将代码引入AuthenticationController:
public async Task<IActionResult> Exchange(OpenIdConnectRequest request)
{
Debug.Assert(request.IsTokenRequest(),
"The OpenIddict binder for ASP.NET Core MVC is not registered. " +
"Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");
if (request.IsPasswordGrantType())
{
var user = await _userManager.FindByNameAsync(request.Username);
//if (user == null)
if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
{
工作!你去了......回答了我自己的问题。 Mya将来帮助别人
答案 0 :(得分:2)
虽然您的解决方案有效,但在调用SignInManager.CanSignInAsync(user)
时,您可能更愿意配置ASP.NET核心标识以使“电子邮件已确认”检查。您可以在身份选项中配置它:
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.SignIn.RequireConfirmedEmail = true;
});