ASP.NET Web API 2强制要求确认电子邮件

时间:2016-11-24 10:07:09

标签: c# asp.net asp.net-web-api

这听起来像是一个非常基本的问题,但ASP.NET的文档一般很糟糕,我找不到如何强制执行电子邮件确认。

我已经能够设置生成和发送确认电子邮件没问题,而且效果很好。

我只希望用户访问已确认的'Auth'端点。我该如何强制执行此操作。

我能找到的关闭信息似乎只适用于需要向Startup.cs添加config.SignIn.RequireEmailConfirmation的ASP.NET MVC,但Web API中的Startup.cs完全不同。

作为最后的手段,我可​​以补充一下:

if (User.EmailConfirmed)到每个端点,但我觉得这有点戏剧性。

我还尝试将此“规则”添加为自定义身份验证属性,但我不确定如何访问当前用户,因此无法检查电子邮件是否已确认。

如何确保电子邮件确认强制执行

1 个答案:

答案 0 :(得分:2)

选项:

  1. 当您向具有密码的用户发送邀请链接以进行注册时,请确保您创建的用户没有密码,并向用户发送包含来自AppUserManager.GeneratePasswordResetTokenAsync(user.id)的代码的链接,用户可以在其中设置密码,您可以在此操作中将EmailConfirmed设置为true。

  2. 强制检查用户在生成令牌时确认电子邮件:

  3. 在ConfigureAuth的Startup中

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="https://netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
    
    <a href="javascript:void(0)" class="stat-item remark" data-id='1' title='Give your Remarks on it'>
      <i class="fa fa-comments-o icon"></i>
    </a>  
    <div class="post-footer" id="post-footer-1">
      <p>Loading the list</p>
    </div>
    
    <a href="javascript:void(0)" class="stat-item remark" data-id='2' title='Give your Remarks on it'>
      <i class="fa fa-comments-o icon"></i>
    </a>  
    <div class="post-footer" id="post-footer-2">
      <p>Loading the list</p>
    </div>
    
    <a href="javascript:void(0)" class="stat-item remark" data-id='3' title='Give your Remarks on it'>
      <i class="fa fa-comments-o icon"></i>
    </a>  
    <div class="post-footer" id="post-footer-3">
      <p>Loading the list</p>
    </div>

    去检查你的提供者(ApplicationOAuthProvider):

     OAuthOptions = new OAuthAuthorizationServerOptions
                {
                    TokenEndpointPath = new PathString("/Token"),
                    Provider = new ApplicationOAuthProvider("self"),
                    //...
                    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                    AllowInsecureHttp = false
                };