Oauth 如何检索外部登录确认方法的登录提供者名称ASP.Net MVC Core

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

在AccountController.cs的
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
idential
UserName
字段时发生冲突

希望有帮助

var user = new ApplicationUser { UserName = info.LoginProvider + model.Email, Email = model.Email };