2015-06-24 26 views
0

我想补充的,如果在下面的代码声明否认谁没有证实他们的电子邮件地址的用户 - 像这样的伪代码:ASP.NET防止登录的时候EmailConfirmed是假的使用VB.Net

if EmailConfirmed = false Then RedirectToURL and user = "" 

Protected Sub LogIn(sender As Object, e As EventArgs) 
    If IsValid Then 

     ' Validate the user password 
     Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)() 
     Dim signinManager = Context.GetOwinContext().GetUserManager(Of ApplicationSignInManager)() 


     ' This doen't count login failures towards account lockout 
     ' To enable password failures to trigger lockout, change to shouldLockout := True 
     Dim result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout:=True) 

     Select Case result 
      Case SignInStatus.Success 
       IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response) 
       Exit Select 
      Case SignInStatus.LockedOut 
       Response.Redirect("/Account/Lockout") 
       Exit Select 
      Case SignInStatus.RequiresVerification 
       Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
              Request.QueryString("ReturnUrl"), 
              RememberMe.Checked), 
           True) 
       Exit Select 
      Case Else 
       FailureText.Text = "Invalid login attempt" 
       ErrorMessage.Visible = True 
       Exit Select 
     End Select 

    End If 
End Sub 

    End Class 

我已经看到了它在C#中做,但我无法复制或准确地转换。感谢您的任何帮助。

UPDATE

当我使用的代码有@HumbleBeginnings链接,并转换到VB我得到:

Dim user = Await.UserManager.FindByNameAsync(model.Email) 
If user IsNot Nothing Then If Not 
Await UserManager.IsEmailConfirmedAsync(user.Id) Then 
ViewBag.errorMessage = "You must have a confirmed email to log on." 
Return  
View("Error") 
End If 

不过是说,等待着只能异步方法一起使用,可以考虑改变这个方法与异步改性剂和改变它的返回类型任务

+0

能否请您发布的.aspx代码过于解决?什么控制用户必须检查/ teype确认电子邮件? –

+0

谢谢Emmanuel N.不知道要发布哪个.aspx代码。我能够得到它的工作,以便asp发送一封电子邮件给用户的电子邮件。在电子邮件中是确认电子邮件的链接。当用户点击链接时,一个值返回到我的数据库以将confirEmail从False切换到True。现在我希望用户不能登录,如果confirmedEmail = false。 – user2796515

回答

0

这就是我如何结束解决这一问题:

Protected Async Sub LogIn(sender As Object, e As EventArgs) 
    If IsValid Then 

     ' Validate the user password 
     Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)() 
     Dim signinManager = Context.GetOwinContext().GetUserManager(Of ApplicationSignInManager)() 

     ' This doen't count login failures towards account lockout 
     ' To enable password failures to trigger lockout, change to shouldLockout := True 
     Dim result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout:=True) 

     Dim user = Await manager.FindByNameAsync(Email.Text) 
     If user Is Nothing Then 
      ModelState.AddModelError("", "Invalid login attempt.") 
     Else 
     End If 
     'Add this to check if the email was confirmed. 
     If Not Await manager.IsEmailConfirmedAsync(user.Id) Then 
      ConfirmationExpected.Text = "Your email address has not been confirmed <br/> <br/>Please Check your email (including spam folder) <br/>OR Click 'Register' to have a new confirmation email generated." 
      ConfirmationRequired.Visible = True 

     Else 

      Select Case result 
       Case SignInStatus.Success 
        IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response) 
        Exit Select 
       Case SignInStatus.LockedOut 
        Response.Redirect("/Account/Lockout") 
        Exit Select 
       Case SignInStatus.RequiresVerification 
        Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
                Request.QueryString("ReturnUrl"), 
                RememberMe.Checked), 
             True) 
        Exit Select 
       Case Else 
        FailureText.Text = "Invalid login attempt" 
        ErrorMessage.Visible = True 
        Exit Select 
      End Select 

     End If 

    End If 
End Sub 

这是添加的代码:

Dim user = Await manager.FindByNameAsync(Email.Text) 
    If user Is Nothing Then 
     ModelState.AddModelError("", "Invalid login attempt.") 
    Else 
    End If 
    'Add this to check if the email was confirmed. 
    If Not Await manager.IsEmailConfirmedAsync(user.Id) Then 
     ConfirmationExpected.Text = "Your email address has not been confirmed <br/> <br/>Please Check your email (including spam folder) <br/>OR Click 'Register' to have a new confirmation email generated." 
     ConfirmationRequired.Visible = True 

    Else 
0

退房THIS链接,头下特别是部分“需要登录后才电子邮件确认”。帐户/注册控制器中有一条注释,似乎有窍门。它在C#中,但它应该让你接近。希望这可以帮助。

+0

PS HumbleBeginnings。在VB中创建我的项目时有意思(后来可能是一个糟糕的主意),代码://要求用户在他们可以登录之前拥有确认的电子邮件。 var user = await UserManager.FindByNameAsync(model.Email);如果(user!= null) {!await UserManager.IsEmailConfirmedAsync(user.Id)) ViewBag.errorMessage =“您必须有确认的电子邮件才能登录。 return View(“Error”); } }是不存在(如在C#一个 – user2796515

+0

关于VB开发最主要的是,大部分的例子是在C#中,需要进行转换。 - 并不总是完美的您遇到的问题的一部分。我遇到了与转换类似的问题(与你的问题没有任何关系)[至少还有!]一个实现了“IIdentityMessageService.SendAsync”的函数。转换器把它烧得很好。我花了太久的时间假设转换器和intellisense没有问题,直到我关注这个主题并尝试用我自己的方式尝试并最终奏效。 – HumbleBeginnings

+0

我愿意尝试帮忙,但我认为您需要“完善”您的发帖技巧 - 至少让您可以将“代码”看作“代码”。你为什么不给它练习镜头(使用代码链接并阅读说明)并重新发布。如果他们无法阅读你的帖子,你一定会消除许多有用的朋友。我不是发布或这个特定主题的大师,但我会尽我所能帮助。 – HumbleBeginnings

0

我发现,要检查是否在尝试的电子邮件确认登录。否则,他们将在登录到其他页面时登录。这是我做出的一个变化,显示了逻辑顺序。我重定向到未经验证的页面,以防止反XSRF问题。

Protected Async Sub LogIn(sender As Object, e As EventArgs) 
    If IsValid Then 
     Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)() 
     Dim signinManager = Context.GetOwinContext().GetUserManager(Of ApplicationSignInManager)() 

     Dim user = Await manager.FindByNameAsync(Email.Text) 
     If user Is Nothing Then 
      ModelState.AddModelError("", "Invalid login attempt.") 
      FailureText.Text = "Invalid login attempt" 
      ErrorMessage.Visible = True 
     Else 
      'Add this to check if the email was confirmed. I check this before even attempting a login- as it logs the user in, regardless, if I do not. 
      If Not Await manager.IsEmailConfirmedAsync(user.Id) Then 
       Response.Redirect("/Account/NotValidated") 
      Else 
       Dim result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout:=True) 

       Select Case result 
        Case SignInStatus.Success 
         IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response) 

        Case SignInStatus.LockedOut 
         Response.Redirect("/Account/Lockout") 

        Case SignInStatus.RequiresVerification 
         Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
                 Request.QueryString("ReturnUrl"), 
                 RememberMe.Checked), 
              True) 

        Case Else 
         FailureText.Text = "Invalid login attempt" 
         ErrorMessage.Visible = True 

       End Select 
      End If 
     End If 

    End If 
0

,以验证电子邮件已被证实可以通过将下面的代码在你的洛

If IsValid Then 
     ' Validate the user password 
     Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)() 
     Dim signinManager = Context.GetOwinContext().GetUserManager(Of ApplicationSignInManager)() 

     ' este segmento valida que el usuario ya confirmo su cuenta de correo electronico, 
     ' de lo contrario no intenta ingresar 
     ' you need add onli this code block -- init validate EmailConfirmed is false using VB.Net 
     Dim user As ApplicationUser = manager.FindByName(Email.Text) 
     If user Is Nothing OrElse Not manager.IsEmailConfirmed(user.Id) Then 
      FailureText.Text = "El usuario no existe o bien no ha sido confirmado. <br/> Por favor confirmar su correo electrónico (Verifique la carpeta spam o correo no deseado). <br/> O Haga clic en 'Registrarse como nuevo usuario'" 
      ErrorMessage.Visible = True 
      Email.Focus() 
      Return 
     End If 
     ' end validate EmailConfirmed is false using VB.Net 

     ' This doen't count login failures towards account lockout 
     ' To enable password failures to trigger lockout, change to shouldLockout := True 
     Dim result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout:=True) 
     Select Case result 
      Case SignInStatus.Success 
       logger.Info(Email.Text & "│ usuario INICIO sesion ") ' comentario para la bitacora de logg 
       System.Web.Security.FormsAuthentication.RedirectFromLoginPage(Email.Text, True) 
       'IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response) 
       Exit Select 
      Case SignInStatus.LockedOut 
       Response.Redirect("~/Account/Lockout") 
       Exit Select 
      Case SignInStatus.RequiresVerification 
       Response.Redirect(String.Format("~/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
               Request.QueryString("ReturnUrl"), 
               RememberMe.Checked), 
            True) 
       Exit Select 
      Case Else 
       FailureText.Text = "Intento de inicio de sesión inválido " 
       ErrorMessage.Visible = True 
       Email.Focus() 
       Exit Select 
     End Select 
    End If 
End Sub