C# 如何从Blazor组件调用“/Identity/Account/ExternalLogin”?
我的目标是让外部提供者按钮与/Identity/Account Login和Register页面中的foreach完全相同,请参见下面的Blazor组件。我正在使用Blazor服务器应用程序模板 我已经成功地拉入了外部提供者、枚举按钮,并且拥有一个与默认身份登录页面具有相同操作的表单。我的外部登录是通过Twitter进行的,并且已确认在默认页面上工作C# 如何从Blazor组件调用“/Identity/Account/ExternalLogin”?,c#,asp.net-core,asp.net-identity,blazor,blazor-server-side,C#,Asp.net Core,Asp.net Identity,Blazor,Blazor Server Side,我的目标是让外部提供者按钮与/Identity/Account Login和Register页面中的foreach完全相同,请参见下面的Blazor组件。我正在使用Blazor服务器应用程序模板 我已经成功地拉入了外部提供者、枚举按钮,并且拥有一个与默认身份登录页面具有相同操作的表单。我的外部登录是通过Twitter进行的,并且已确认在默认页面上工作 <form action="/Identity/Account/ExternalLogin" method="
<form action="/Identity/Account/ExternalLogin" method="post">
@foreach (var provider in ExternalLogins)
{
<button type="submit" class="btn btn-primary btn-lg form-control" name="provider"
value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</form>
当我使用该按钮从blazor组件登录时,调试窗口显示抛出的Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException。
我唯一的猜测是,这是因为导航不是从一个内置的身份页面启动的,该页面可能有反伪造元素。如何在没有中间人登录/注册页面的情况下直接导航到此ExternalLogin页面?调用/Identity/Account/ExternalLogin页面意味着要处理反CSRF机制HTTP头和表单的隐藏字段,这不容易实现。
与直接调用/Identity/Account/ExternalLogin不同,定制登录页面更容易:
从具有身份验证wasm或服务器的默认blazor模板开始,根据您的需要搭建标识项,但至少需要登录页面和外部登录页面来自定义它们
选择Areas文件夹并右键单击以打开上下文菜单。选择添加->新建脚手架项目
选择Identity并单击Add
选择您的标识数据上下文类和要构建的内容
根据您的需要更新Areas/Identity/Pages/Account/Login.cshtml。。。。你走的不是好路。事件如果您获得反CSRF令牌并将其传递到表单数据中,它将不起作用。你只需要一个Twitter登录吗?不,我最终会添加其他登录提供者。好的,但是如果你添加一个新的外部提供者,你需要显示提供者选择的登录页面。你需要本地登录吗?@aguafrommars不,我不这么认为。仅社交/外部登录。标记为有用,因为我更新了登录/注册页面以仅显示外部登录,但不直接解决从前端调用外部登录页面的问题。另外,这个答案提到了Blazor WebAssembly应用程序模板,它可能仍然相关,因为我正在使用Blazor服务器应用程序模板,所以它已经被标记为Blazor服务器端。我也会更新我的帖子来澄清这一点。