Oauth 如何检索外部登录确认方法的登录提供者名称ASP.Net MVC Core
在AccountController.cs的Oauth 如何检索外部登录确认方法的登录提供者名称ASP.Net MVC Core,oauth,asp.net-core-mvc,Oauth,Asp.net Core Mvc,在AccountController.cs的ExternalLoginConfirmation方法中,将根据user=newapplicationuser{UserName=model.Email,Email=model.Email}创建一个新用户 我想在UserName属性中创建新用户,并在登录提供商名称前面加上前缀: user = new ApplicationUser { UserName = provider ?? model.Email + model.Email, Email = m
ExternalLoginConfirmation
方法中,将根据user=newapplicationuser{UserName=model.Email,Email=model.Email}
创建一个新用户
我想在UserName
属性中创建新用户,并在登录提供商名称前面加上前缀:
user = new ApplicationUser { UserName = provider ?? model.Email + model.Email, Email = model.Email };
我的想法是尝试这样做:
var loginProviders = _signInManager.GetExternalAuthenticationSchemes().ToList();
var provider = loginProviders[index].DisplayName.ToString();
如何选择index
返回使用过的loginProvider
?
不幸的是var provider=loginProviders.DisplayName.ToString()代码>不起作用
我正在使用的身份验证
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
});
app.UseGoogleAuthentication(new GoogleOptions()
{
ClientId = Configuration["Authentication:Google:ClientId"],
ClientSecret = Configuration["Authentication:Google:ClientSecret"]
});
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions()
{
ClientId = Configuration["Authentication:Microsoft:ClientId"],
ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"]
});
app.UseFacebookAuthentication(new FacebookOptions()
{
AppId = Configuration["Authentication:Facebook:AppId"],
AppSecret = Configuration["Authentication:Facebook:AppSecret"]
});
在测试我的网站时,我使用我的凭证。
让UserName=model.Email,Email=model.Email
给出一个错误。
通过设置,我可以使用相同的电子邮件
services.AddIdentity<ApplicationUser, IdentityRole>(opts => {
opts.User.RequireUniqueEmail = false;
})
services.AddIdentity(选项=>{
opts.User.RequireUniqueEmail=false;
})
但是我不能拥有相同的用户名
有什么想法吗
非常感谢。与此同时,我找到了解决办法。
在方法中
public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl = null)
然后,只需在UserName
字段中添加info.LoginProvider
即可添加新用户,如下所示
var user = new ApplicationUser { UserName = info.LoginProvider + model.Email, Email = model.Email };
这样做,您可以使用您的凭据(您的电子邮件地址)来测试多个登录,避免在尝试插入dbo.AspNetUsers
identialUserName
字段时发生冲突
希望有帮助
var user = new ApplicationUser { UserName = info.LoginProvider + model.Email, Email = model.Email };