Asp.net 谷歌外部登录按钮没有';使用Google CSS时,不要调用OnPost或OnGetCallBack
当我使用类Asp.net 谷歌外部登录按钮没有';使用Google CSS时,不要调用OnPost或OnGetCallBack,asp.net,asp.net-mvc,asp.net-core,asp.net-core-mvc,google-login,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,Google Login,当我使用类g-signin2时,不会调用OnPost(单击登录按钮)和OnGetCallbackAsync(谷歌登录后)方法。如果我删除Google的classg-signn2,这些方法就会被调用。我可以补充一点,这个类会弹出一个Google登录窗口,而我不会被重定向到一个新的Google页面来登录 <button type="submit" class="g-signin2 m-auto" data-onsuccess="onSignIn
g-signin2
时,不会调用OnPost
(单击登录按钮)和OnGetCallbackAsync
(谷歌登录后)方法。如果我删除Google的classg-signn2
,这些方法就会被调用。我可以补充一点,这个类会弹出一个Google登录窗口,而我不会被重定向到一个新的Google页面来登录
<button type="submit" class="g-signin2 m-auto" data-onsuccess="onSignIn" name="provider" value="@provider.Name"></button>
公共异步任务OnGetCallbackAsync(string returnUrl=null,string remoteError=null)
{
returnUrl=returnUrl??Url.Content(“~/”);
if(remoteError!=null)
{
ErrorMessage=$“来自外部提供程序的错误:{remoteError}”;
返回重定向网页(“./Login”,新的{ReturnUrl=ReturnUrl});
}
var info=await _signInManager.getexternallogininfosync();
if(info==null)
{
ErrorMessage=“加载外部登录信息时出错。”;
返回重定向网页(“./Login”,新的{ReturnUrl=ReturnUrl});
}
//如果用户已经登录,请使用此外部登录提供程序登录该用户。
var result=await _signInManager.externalLoginIgninaSync(info.LoginProvider,info.ProviderKey,isPersistent:false,bypassTwoFactor:true);
if(result.successed)
{
_logger.LogInformation(“{Name}使用{LoginProvider}提供程序登录。”,info.Principal.Identity.Name,info.LoginProvider);
返回LocalRedirect(returnUrl);
}
如果(结果IsLockedOut)
{
返回重定向Topage(“/锁定”);
}
其他的
{
//如果用户没有帐户,请要求用户创建帐户。
ReturnUrl=ReturnUrl;
ProviderDisplayName=info.ProviderDisplayName;
if(info.Principal.HasClaim(c=>c.Type==ClaimTypes.Email))
{
输入=新输入模型
{
Email=info.Principal.FindFirstValue(ClaimTypes.Email)
};
}
返回页();
}
}
public IActionResult OnPost(string provider, string returnUrl = null)
{
// Request a redirect to the external login provider.
var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return new ChallengeResult(provider, properties);
}
public async Task<IActionResult> OnGetCallbackAsync(string returnUrl = null, string remoteError = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (remoteError != null)
{
ErrorMessage = $"Error from external provider: {remoteError}";
return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
ErrorMessage = "Error loading external login information.";
return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
}
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
if (result.Succeeded)
{
_logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
return LocalRedirect(returnUrl);
}
if (result.IsLockedOut)
{
return RedirectToPage("./Lockout");
}
else
{
// If the user does not have an account, then ask the user to create an account.
ReturnUrl = returnUrl;
ProviderDisplayName = info.ProviderDisplayName;
if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email))
{
Input = new InputModel
{
Email = info.Principal.FindFirstValue(ClaimTypes.Email)
};
}
return Page();
}
}