hi
AI provides the solution. You can check the document and sample code.
Thanks.
ok, I will update all modules to support this case.
Maybe 9.2.4 or 9.2.5
Thanks.
hi
Does the app get your single sign on user email on the register page?
If the registration page can get your email address. That means externalUser is null.
var externalUser = await UserManager.FindByEmailAsync(email);
You can override the Login page to debug the OnGetExternalLoginCallbackAsync method.
[ExposeServices(typeof(OpenIddictSupportedLoginModel), typeof(LoginModel))]
public class MyLoginModel : OpenIddictSupportedLoginModel
{
[UnitOfWork]
public override async Task<IActionResult> OnGetExternalLoginCallbackAsync(string remoteError = null)
{
if (remoteError != null)
{
Logger.LogWarning($"External login callback error: {remoteError}");
return RedirectToPage("./Login");
}
await IdentityOptions.SetAsync();
var loginInfo = await SignInManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
Logger.LogWarning("External login info is not available");
return RedirectToPage("./Login");
}
var result = await SignInManager.ExternalLoginSignInAsync(
loginInfo.LoginProvider,
loginInfo.ProviderKey,
isPersistent: true,
bypassTwoFactor: true
);
if (result.IsNotAllowed || result.IsLockedOut || result.RequiresTwoFactor)
{
Logger.LogWarning($"External login failed with status: {result}");
return RedirectToPage("./Login");
}
//TODO: Handle other cases for result!
var email = loginInfo.Principal.FindFirstValue(AbpClaimTypes.Email) ?? loginInfo.Principal.FindFirstValue(ClaimTypes.Email);
if (email.IsNullOrWhiteSpace())
{
return RedirectToPage("./Register", new {
isExternalLogin = true,
externalLoginAuthSchema = loginInfo.LoginProvider,
returnUrl = ReturnUrl,
returnUrlHash = ReturnUrlHash,
linkTenantId = LinkTenantId,
linkUserId = LinkUserId,
linkToken = LinkToken
});
}
var externalUser = await UserManager.FindByEmailAsync(email);
if (externalUser == null)
{
return RedirectToPage("./Register", new {
isExternalLogin = true,
externalLoginAuthSchema = loginInfo.LoginProvider,
returnUrl = ReturnUrl,
returnUrlHash = ReturnUrlHash,
linkTenantId = LinkTenantId,
linkUserId = LinkUserId,
linkToken = LinkToken
});
}
await SignInManager.SignInAsync(externalUser, false , loginInfo.LoginProvider);
return RedirectSafely(ReturnUrl, ReturnUrlHash);
}
}
Thanks
hi
Thanks. Your question has been refunded.
Hi
Can you share these Docker images, I can run it directly without build.
Thanks.
hi
I don't have many suggestions. You can rewrite and replace all components and layout pages, and it should not prevent you from implementing it.
Thanks.
hi
https://github.com/abpframework/abp/issues/
You can use Include and ThenInclude to load N degree navigation property. This is not a problem.
https://learn.microsoft.com/en-us/ef/core/querying/related-data/eager#including-multiple-levels
https://abp.io/docs/latest/framework/data/entity-framework-core#defaultwithdetailsfunc
hi
It sounds like explicit loading could also solve your problem. Are you encountering any errors?
You can query entities and their navigation properties through the IRepository.
Thanks
hi
What is your ABP version?
Can you share the logs.txt file?
Can you share some screenshots?
Thanks.