Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Blazor组件调用“/Identity/Account/ExternalLogin”?_C#_Asp.net Core_Asp.net Identity_Blazor_Blazor Server Side - Fatal编程技术网

C# 如何从Blazor组件调用“/Identity/Account/ExternalLogin”?

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="

我的目标是让外部提供者按钮与/Identity/Account Login和Register页面中的foreach完全相同,请参见下面的Blazor组件。我正在使用Blazor服务器应用程序模板

我已经成功地拉入了外部提供者、枚举按钮,并且拥有一个与默认身份登录页面具有相同操作的表单。我的外部登录是通过Twitter进行的,并且已确认在默认页面上工作

<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服务器端。我也会更新我的帖子来澄清这一点。