Asp.NET Identity 2 giving “Invalid Token” error

前端 未结 21 2012
情话喂你
情话喂你 2020-11-27 03:04

I\'m using Asp.Net-Identity-2 and I\'m trying to verify email verification code using the below method. But I am getting an \"Invalid Token\"

21条回答
  •  感动是毒
    2020-11-27 03:29

    The following solution helped me in WebApi:

    Registration

    var result = await _userManager.CreateAsync(user, model.Password);
    
    if (result.Succeeded) {
    EmailService emailService = new EmailService();
    var url = _configuration["ServiceName"];
    var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
    var encodedToken = HttpUtility.UrlEncode(token);
    
    // .Net Core 2.1, Url.Action return null
    // Url.Action("confirm", "account", new { userId = user.Id, code = token }, protocol: HttpContext.Request.Scheme);
    var callbackUrl = _configuration["ServiceAddress"] + $"/account/confirm?userId={user.Id}&code={encodedToken}";
    var message = emailService.GetRegisterMailTemplate(callbackUrl, url);
    
    await emailService.SendEmailAsync( model.Email, $"please confirm your registration {url}", message );
    }
    

    Confirm

    [Route("account/confirm")]
    [AllowAnonymous]
    [HttpGet]
    public async Task ConfirmEmail(string userId, string code) {
      if (userId == null || code == null) {
        return Content(JsonConvert.SerializeObject( new { result = "false", message = "data is incorrect" }), "application/json");
      }
    
      var user = await _userManager.FindByIdAsync(userId);
      if (user == null) {
        return Content(JsonConvert.SerializeObject(new { result = "false", message = "user not found" }), "application/json");
      }
    
      //var decodedCode = HttpUtility.UrlDecode(code);
      //var result = await _userManager.ConfirmEmailAsync(user, decodedCode);
    
      var result = await _userManager.ConfirmEmailAsync(user, code);
    
      if (result.Succeeded)
        return Content(JsonConvert.SerializeObject(new { result = "true", message = "ок", token = code }), "application/json");
      else
        return Content(JsonConvert.SerializeObject(new { result = "false", message = "confirm error" }), "application/json");
    }
    

提交回复
热议问题