Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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
C# 如何使用无标识的WebApi添加帐户确认_C#_Asp.net Web Api_Email Verification - Fatal编程技术网

C# 如何使用无标识的WebApi添加帐户确认

C# 如何使用无标识的WebApi添加帐户确认,c#,asp.net-web-api,email-verification,C#,Asp.net Web Api,Email Verification,我有一个带有Cors的WebApi项目,用于使用令牌进行身份验证,并使用SendGrid进行电子邮件验证。我需要创建一个方法来向用户发送电子邮件,这样他就可以确认帐户,问题是,我总是发现使用IDENTITY,这是我不使用的。我发现了这个和这个,我试图“适应”我的代码,但这几乎是不可能的,因为这一切都与身份有关 这就是我所拥有的 启动类: public void ConfigureAuth(IAppBuilder app) { app.UseOAuthBearerAuthe

我有一个带有Cors的WebApi项目,用于使用令牌进行身份验证,并使用SendGrid进行电子邮件验证。我需要创建一个方法来向用户发送电子邮件,这样他就可以确认帐户,问题是,我总是发现使用IDENTITY,这是我不使用的。我发现了这个和这个,我试图“适应”我的代码,但这几乎是不可能的,因为这一切都与身份有关

这就是我所拥有的

启动类:

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);
        }
    }

但是我不知道如何实现电子邮件确认。

您试图在代码中执行的是自定义验证,这就是您无法使用标识示例的原因。这意味着,在应用程序中需要的任何额外逻辑都必须自行编程

这包括发送自定义验证电子邮件和处理用户单击验证链接的后续操作。因为您使用的是ASP.NET MVC,这意味着您可以创建一个处理验证链接的操作。这意味着当用户想要注册时,您可以创建一封带有链接的电子邮件(包含某种一次性令牌,不要将其与OAUTH令牌混淆)。然后,当用户单击此链接时,asp.net mvc操作可以处理此请求

这让我回到identity.net示例。使用自己的登录/验证和身份验证方法非常困难,而且容易出错。这就是为什么在大多数情况下使用像asp.net identity这样的脱离自我的方法会更好

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; }
}