Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
- ABP Framework version: v4.2
- UI type: MVC
- DB provider: EF Core
- Tiered (MVC) or Identity Server Separated (Angular): no
- Exception message and stack trace:
Volo.Abp.Identity.AbpIdentityResultException: Invalid token.
at Microsoft.AspNetCore.Identity.AbpIdentityResultExtensions.CheckErrors(IdentityResult identityResult)
at Volo.Abp.Account.AccountAppService.ConfirmEmailAsync(ConfirmEmailInput input)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.Abp.Account.Public.Web.Pages.Account.EmailConfirmationModel.OnGetAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.NonGenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Rethrow(PageHandlerExecutedContext context)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ExceptionContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope`
Hello,
some of my customers can't confirm their E-Mail addresses. They get errors when clicking the links. One of the users forwarded me the confirmation E-Mail; it seemed to be ok.
After inspecting the audit logs, I found out that user and tenant ids are correct. However, the tokens seem to contain unicode characters. For example:
`"token": "CfDJ8DKAitCAIvVDuLO5ZU057RuhcCbm1aNCntlJiDXp\u002BPueFsoWE920CmZX9vL2kF\u002BbzMET\u002BNJYJzUJHUVDpFOblBu4T1PaGUui\u002BEhNHZAJqMjdsz15CXpkSglNFts9Mz525IKkkjZ\u002BaZeghXIeI8jgnPdPtaODHGrGBSysPMry/TQMzX5EKLDLEvgPivqiMSEGuRHP5tG9WcVBqiozHqfHxt9V\u002BDZOdnK2uRt2nfz9KRygvAdwOhwzO7UdwjLwLR5uOg=="`
I'm not sure whether these \u002... characters belong to the token? Unfortunately, I couldn't find where the tokens are stored in the database (AbpUserTokens table is empty?) so I didn't have a chance to compare then.
Any idea?
Thanks in advance and best regards Claus
2 Answer(s)
-
0
hi
Maybe {UrlEncoder.Default.Encode(confirmationToken)} cause the problem. I'm not sure. If you find the way to reproduce this I can check it.
var confirmationToken = await UserManager.GenerateEmailConfirmationTokenAsync(user); var link = "confirmationToken={UrlEncoder.Default.Encode(confirmationToken)}";
eg:
CfDJ8CMMAZi/KQ1PgRA2b3w2rbDriFgwCA0wWE3hlavTdl0R9qyQBNNkYqXhgiT/buELozMq47EMr8/7SFsh293golGHO9V2ax96a3Gldwg+LRg03kxeQlqo5wd9v/DHQNq1Zb0R41m5Im5FSKz2mVltar3gnFwrE2bNK7/xmAdKxYksOSK59sQVPPQxPb7QZt/WGSIuuWUy/oPya+EuVzJZXBDuz9nJCQye2iA5cZad5hEHvaSCr3UQIzu3d1/kcn5zOg==
-
0
This question has been automatically marked as stale because it has not had recent activity.