- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 AspNetCore 后端 api(在 F# 和 Giraffe 中),它使用 AzureAD 身份验证和 Microsoft.AspNetCore.Authentication.AzureAD.UI、有状态 session 存储和 https only cookie。
前端是使用 Fable 编译为 js 的 Elmish SPA。
如果我只是在 url 栏中输入后端的 protected 端点,一切正常,如果尚未登录,我将重定向到 login.microsoft 端点,使用 clientID 等,成功登录后,原始请求完成,我得到了 protected 端点的响应。
但是,如果我尝试从 SPA 代码访问相同的端点,例如:使用 fetch 或使用 Fable.Remoting,如果未登录,后端仍会重定向,但重定向到 login.microsoft 的请求不再有效。
使用 Fable.Remoting 有一个 CORS header ,登录端点拒绝。如果我使用 nocors 发送 fetch,登录端点会收到 200 OK 响应,但没有响应正文(例如,登录页面没有 html 代码),而且似乎什么也没发生。
我只是不知道在 SPA 方面应该如何处理,并且无法真正找到任何相关信息。如果从 Fable.Remoting 启动与从浏览器 URL 栏启动,为什么后端会在重定向中包含 CORS header ?没有响应正文的 fetch-ed 响应有什么问题?
我可以只将 js 代码写入我的客户端,但甚至无法弄清楚在纯 js SPA 中如何处理。
还在生产中尝试了整个事情,从等式中删除 webpack devServer 代理,但一切都保持不变。
最佳答案
首先,在 Giraffe 中创建“登录”和“退出”路由:
/// Signs a user in via Azure
GET >=> routeCi "/signin"
>=> (fun (next: HttpFunc) (ctx: HttpContext) ->
if ctx.User.Identity.IsAuthenticated
then redirectTo false "/" next ctx
else challenge AzureADDefaults.AuthenticationScheme next ctx
)
/// Signs a user out of Azure
GET >=> routeCi "/signout"
>=> signOut AzureADDefaults.AuthenticationScheme
>=> text "You are signed out."
接下来,您需要配置 webpack “devServerProxy”。这是我当前的寓言应用程序的配置方式:
// When using webpack-dev-server, you may need to redirect some calls
// to a external API server. See https://webpack.js.org/configuration/dev-server/#devserver-proxy
devServerProxy: {
// delegate the requests prefixed with /api/
'/api/*': {
target: "http://localhost:59641",
changeOrigin: true
},
// delegate the requests prefixed with /signin/
'/signin/*': {
target: "http://localhost:59641",
changeOrigin: true
},
// delegate the requests prefixed with /signout/
'/signout/*': {
target: "http://localhost:59641",
changeOrigin: true
}
},
这将允许您提供来自 SPA 的登录链接:
a [Href "/signin"] [str "Sign in"]
现在,当用户加载您的应用程序时,您可以立即尝试拉回一些用户信息(此路线应该需要身份验证)。如果请求(或任何其他请求)失败并显示 401,您可以提示用户使用您的登录链接“登录”。
关于asp.net-core - 如何在 Fable Elmish SPA 中处理从后端重定向到身份验证提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61177278/
紧随my previous question我在“Elm in Action”(并尝试移植到 Fable-Elmish)中处理的示例具有来自自定义元素的自定义事件。在 html 文件中,我有以下内容:
我有一个安全堆栈应用程序。我需要使用户能够上传和下载文件。 通过使用上传作品 Browser.Dom.FileReader.Create() 有没有相应的方式让用户下载文件? This answer提
我正在使用 SAFE 堆栈的 Elmish.Bridge 风格。 在 View 的顶层,我创建一个如下输入字段: Input.input [ Input.Value(model.FieldValue)
我已经使用 dotnet new SAFE 命令设置了一个标准 SAFE 应用程序,生成了两个服务器和客户端项目(以及共享文件夹)。 Client 项目具有包含 View 函数和引导代码的 Clien
我尝试使用 2 个参数调用 Redux.createStore,以下代码简化了签名,但我无法让 FSharp 理解我想要的内容: [] module redux = let createSto
我可以将字符串保存到本地浏览器存储 Browser.localStorage.setItem(key, str) 但是当我尝试对一个受歧视的联合进行字符串化时(例如,通过在其上调用 string),它
我想使用 Fable.JsonConverter。 我的测试代码(几乎复制 this)FableJson.fs在下面, module FableJson open Newtonsoft.Json //
我看过 simple ways使用 HTML5 File API 从 JavaScript 中输入的文件中读取内容。 这是我的 view 方法,在一个小型 fable-arch 应用程序中: let
我是 F# 和 Fable 的新手,我正在尝试从 Fable 的编译代码创建一个 Mongodb 集合。 如何在 F# 中表达此代码以使用 Fable 进行编译? var MongoClient =
这是一个客户端 Fable.Remoting 示例,用于打印异步函数的结果。 // Client code (Compiled to Javascript using Fable) /
我在 Fable REPL 中写了下面的代码: open Fable.Core let inline sqr x = x * x // Filters out `points` that are mo
我想将文件上传到我的 Fable-Elmish, end 以便我可以将其发送到服务器进行处理。但是,我找不到任何文档/示例来涵盖这一点。这是我的更新功能: let update msg model :
我正在尝试使用 F# 开发一个 chrome 扩展,发现在 https://fsharp.org/use/web-apps/ 中有一些框架:fable、websharper、borelo 和 SAFE
我需要使用带有 elmish 调度的 Fable-React 有状态组件。我不知道如何创建它。 我正在使用这个项目模板:https://github.com/fable-elmish/template
我正在尝试使用 Fable 编写一个简单的 React 组件。它应该显示一个带有 + 的简单计数器和 -纽扣。也需要留言string通过 Prop 。 出乎意料的是代码可以编译,但会引发运行时错误:
我想在下拉列表中有一个不是 optional 之一的默认值(不是:DefaultValue“2”)。它应该类似于以下内容,但不适用于输入字段。 Input.Placeholder "Your name
我想预测在服务时间内进入商店的顾客数量。我有每小时的数据 周一至周五 8:00 至 18:00 因此,我认为我的时间序列实际上是有规律的,但在某种意义上是非典型的,因为我每天 10 小时和每周 5 天
我正在尝试使用 NPM 包 normalize-wheel在一个寓言项目中。 我已经确认包已经下载到node-modules文件夹。 符合documentation和 this article我正在使
我正在尝试读取寓言 elmish 中的 Browser.Blob 对象 - 我可以在 javascript 中看到它是这样完成的,但我不确定如何处理 FileReader onload 事件。 var
我正在使用 fable 和 fabletools 包进行一些时间序列预测分析,我有兴趣比较单个模型和混合模型(包括我正在使用的各个模型)。 这是一些带有模拟数据框的示例代码:- library(fab
我是一名优秀的程序员,十分优秀!