Could you try creating a new template project with Studio? If it reproduces the problem, it will be easy for me to reproduce it on my end.
Your project is too complex, with many runtime environments that need to be addressed, especially with Docker.
Thanks.
hi
These base class properties will be obtained from LazyServiceProvider
Can you also mock and set the LazyServiceProvider of the base class?
Thanks
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