如何在没有身份的情况下使用 WebApi 添加帐户确认
How to add Account Confirmation using WebApi without Identity
我有一个 WebApi 项目,其中包含用于使用令牌进行身份验证的 Cors 和用于电子邮件的 SendGrid。我需要创建一种方法来向用户发送电子邮件,以便他可以确认帐户,问题是,我总是发现使用 IDENTITY 并且我没有使用它。我发现了这个 tutorial and this one 并且我试图 "adapt" 我的代码,但这几乎是不可能的,因为它都是 IDENTITY。
这就是我所拥有的..
启动class:
public void ConfigureAuth(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
// Ativar o método para gerar o OAuth Token
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions()
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(300),
AllowInsecureHttp = true
});
}
还有我的提供者:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext c)
{
try
{
using (var context = new CegonhaContext())
{
var passValue = context.Users.Where(x => x.Email == c.UserName)
.Select(x => x.PasswordHash).FirstOrDefault();
var exist = Hashing.ValidatePassword(c.Password, passValue);
if (exist)
{
Claim claim = new Claim(ClaimTypes.Name, c.UserName);
Claim[] claims = new Claim[] { claim };
ClaimsIdentity claimsIdentity = new ClaimsIdentity(
claims, OAuthDefaults.AuthenticationType);
c.Validated(claimsIdentity);
}
return Task.FromResult<object>(null);
}
}
catch (Exception)
{
return Task.FromResult<object>(null);
}
}
还有我的模特Table:
public partial class Users
{
[Key]
public int id_users { get; set; }
[StringLength(40)]
public string Email { get; set; }
public byte PhoneConfirmation { get; set; }
public string PasswordHash { get; set; }
public int LoginAttempt { get; set; }
[StringLength(10)]
public string UserProvider { get; set; }
public DateTime? Datepost { get; set; }
public int? EmailConfirmd { get; set; }
//public string Timepost { get; set; }
public int? id_users_data { get; set; }
public virtual Users_data Users_data { get; set; }
}
但是我不知道如何实现电子邮件确认。
您在代码中尝试做的是自定义验证,这就是您无法使用身份示例的原因。这意味着您必须自己对应用程序中需要的任何额外逻辑进行编程。
这包括发送自定义验证电子邮件和处理用户单击验证的后续操作 link。因为您正在使用 ASP.NET MVC,这意味着您可以创建一个操作来处理验证 link。这意味着当用户想要注册时,您会创建一封带有 link 的电子邮件(包含某种一次性令牌,不要将其与 OAUTH 令牌混淆)。然后,当用户单击此 link 时,asp.net mvc 操作可以处理此请求。
这让我想起了 identity.net 的例子。滚动您自己的登录/验证和身份验证方法非常困难且容易出错。这就是为什么大多数时候使用像 asp.net 身份这样的非自我方法更好。
我有一个 WebApi 项目,其中包含用于使用令牌进行身份验证的 Cors 和用于电子邮件的 SendGrid。我需要创建一种方法来向用户发送电子邮件,以便他可以确认帐户,问题是,我总是发现使用 IDENTITY 并且我没有使用它。我发现了这个 tutorial and this one 并且我试图 "adapt" 我的代码,但这几乎是不可能的,因为它都是 IDENTITY。
这就是我所拥有的..
启动class:
public void ConfigureAuth(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
// Ativar o método para gerar o OAuth Token
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions()
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(300),
AllowInsecureHttp = true
});
}
还有我的提供者:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext c)
{
try
{
using (var context = new CegonhaContext())
{
var passValue = context.Users.Where(x => x.Email == c.UserName)
.Select(x => x.PasswordHash).FirstOrDefault();
var exist = Hashing.ValidatePassword(c.Password, passValue);
if (exist)
{
Claim claim = new Claim(ClaimTypes.Name, c.UserName);
Claim[] claims = new Claim[] { claim };
ClaimsIdentity claimsIdentity = new ClaimsIdentity(
claims, OAuthDefaults.AuthenticationType);
c.Validated(claimsIdentity);
}
return Task.FromResult<object>(null);
}
}
catch (Exception)
{
return Task.FromResult<object>(null);
}
}
还有我的模特Table:
public partial class Users
{
[Key]
public int id_users { get; set; }
[StringLength(40)]
public string Email { get; set; }
public byte PhoneConfirmation { get; set; }
public string PasswordHash { get; set; }
public int LoginAttempt { get; set; }
[StringLength(10)]
public string UserProvider { get; set; }
public DateTime? Datepost { get; set; }
public int? EmailConfirmd { get; set; }
//public string Timepost { get; set; }
public int? id_users_data { get; set; }
public virtual Users_data Users_data { get; set; }
}
但是我不知道如何实现电子邮件确认。
您在代码中尝试做的是自定义验证,这就是您无法使用身份示例的原因。这意味着您必须自己对应用程序中需要的任何额外逻辑进行编程。
这包括发送自定义验证电子邮件和处理用户单击验证的后续操作 link。因为您正在使用 ASP.NET MVC,这意味着您可以创建一个操作来处理验证 link。这意味着当用户想要注册时,您会创建一封带有 link 的电子邮件(包含某种一次性令牌,不要将其与 OAUTH 令牌混淆)。然后,当用户单击此 link 时,asp.net mvc 操作可以处理此请求。
这让我想起了 identity.net 的例子。滚动您自己的登录/验证和身份验证方法非常困难且容易出错。这就是为什么大多数时候使用像 asp.net 身份这样的非自我方法更好。