hi
Can you share a gif? Thanks.
hi
You can change CookieRequestCultureProvider.DefaultCookieName to your cookies name.
https://gist.github.com/maliming/b1ea80d68982a5b7064d7df6bafa89f5
hi
Migrating from IdentityServer to OpenIddict Step by Step Guide
https://docs.abp.io/en/commercial/latest/migration-guides/openIddict-step-by-step
hi
Can you share the logs when using tenant.domain.com?
Especially the url in the email.
Temporary solution:
{
text: l('Edit'),
visible: abp.auth.isGranted(
'AbpIdentity.Users.Update'
),
action: function (data) {
_editModal.open({
id: data.record.id,
});
},
},
{
displayNameHtml: true,
text: function (data) {
return '<li><hr class="dropdown-divider"></li>';
}
},
{
text: l('Permissions'),
visible: abp.auth.isGranted(
'AbpIdentity.Users.ManagePermissions'
),
action: function (data) {
_permissionsModal.open({
providerName: 'U',
providerKey: data.record.id,
providerKeyDisplayName: data.record.userName
});
},
}
hi
Please upgrade the Blazorise and Microsoft.AspNetCore.Components.WebAssembly packages based on the errors.
Remember to run abp bundle command on blazor project to update the js and css.
hi @WilliamT
The rowAction doesn't support adding divider now. We will support it in the next version.
https://github.com/abpframework/abp/issues/18377
hi
You can add more scopes by claimsPrincipal.SetScopes("Your_Scope);
hi
Can you try to use the 2.4.3 as the lepton version.
You can also make it simple.
public class PasswordlessExtensionGrant : ITokenExtensionGrant
{
public const string ExtensionGrantName = "PasswordlessExtensionGrant";
public string Name => ExtensionGrantName;
public async Task<IActionResult> HandleAsync(ExtensionGrantContext context)
{
// get phone number from request
var phoneNumber = context.Request.GetParameter("phoneNumber")?.Value?.ToString();
if (string.IsNullOrEmpty(phoneNumber))
{
return new ForbidResult(new[] { OpenIddictServerAspNetCoreDefaults.AuthenticationScheme },
properties: new AuthenticationProperties(new Dictionary<string, string>
{
[OpenIddictServerAspNetCoreConstants.Properties.Error] =
OpenIddictConstants.Errors.InvalidGrant
}!));
}
// retrieve user
var userRepository = context.HttpContext.RequestServices.GetRequiredService<IRepository<IdentityUser, Guid>>();
var user = await userRepository.FirstOrDefaultAsync(x => x.PhoneNumber == phoneNumber);
if (user == null)
{
return new ForbidResult(new[] { OpenIddictServerAspNetCoreDefaults.AuthenticationScheme },
properties: new AuthenticationProperties(new Dictionary<string, string>
{
[OpenIddictServerAspNetCoreConstants.Properties.Error] = OpenIddictConstants.Errors.InvalidGrant
}!));
}
var principal = await context.HttpContext.RequestServices.GetRequiredService<IUserClaimsPrincipalFactory<IdentityUser>>().CreateAsync(user);
// retrieve generic user claims
var userClaimsPrincipalFactory = context.HttpContext.RequestServices.GetRequiredService<IUserClaimsPrincipalFactory<IdentityUser>>();
var claimsPrincipal = await userClaimsPrincipalFactory.CreateAsync(user);
claimsPrincipal.SetScopes(principal.GetScopes());
claimsPrincipal.SetResources(await GetResourcesAsync(context, principal.GetScopes()));
// retrieve abp user claims
var abpClaimsPrincipalFactory = context.HttpContext.RequestServices.GetRequiredService<IAbpClaimsPrincipalFactory>();
var abpClaimsPrincipal = await abpClaimsPrincipalFactory.CreateAsync(claimsPrincipal);
await context.HttpContext.RequestServices.GetRequiredService<AbpOpenIddictClaimsPrincipalManager>().HandleAsync(context.Request, abpClaimsPrincipal);
return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, abpClaimsPrincipal);
}
private async Task<IEnumerable<string>> GetResourcesAsync(ExtensionGrantContext context, ImmutableArray<string> scopes)
{
var resources = new List<string>();
if (!scopes.Any())
{
return resources;
}
await foreach (var resource in context.HttpContext.RequestServices.GetRequiredService<IOpenIddictScopeManager>().ListResourcesAsync(scopes))
{
resources.Add(resource);
}
return resources;
}
}