关于前后端分离的框架下,github oauth完成授权后,最后的回调地址,会去请求后端flask的api,后端的信息可以从github提供的token信息完成更新.但对于前端特别是spa单页应用它是感知不到的.对于前后端分离架构下,flask有没有最佳解决案例.
1-7问题不大,8是由后端发起的,这个在flask中大概如何实现呢
关于前后端分离的框架下,github oauth完成授权后,最后的回调地址,会去请求后端flask的api,后端的信息可以从github提供的token信息完成更新.但对于前端特别是spa单页应用它是感知不到的.对于前后端分离架构下,flask有没有最佳解决案例.
看图里 8 并不是由后端主动发起的响应,而不是由前端发起的请求 5 返回的响应 8。所以你只需要创建一个视图函数来接受请求 5,在视图函数里向 UAA 授权中心发起请求(可以使用 requests)获取 access token(6、7),然后再返回给前端(8)。
(后续有问题在这里回复就可以,不用发到微信)
因为前后端分离中的后端几乎都是返回 json 格式的信息,几乎不存在直接跳前端页面的做法,并且前后端分离都是用token获取用户信息。前端只有拿到相应的token才能获取到github用户的资料。所以这里的问题变成了如何通过后端把用户的 token 给到前端页面。
Flask 视图函数返回字典会自动转换并生成 JSON 响应:
@app.route('/token')
def get_token():
return {'token': '...'}
前端怎么拿到取决于语言和框架。
可能没理解我的意思哈,我问的不是后端怎么生成json数据以及前端怎么调用后端的api.可能是个前后端的综合问题,我找找资料,有了答案我贴过来.
我来简单回答一下,图片中已经很详细、简单易懂的画出来oauth的流程,以及每部分的功能(这与前后端分离这种架构方式无关,由于http协议的性质,所以前后端本身就是分离的)
oauth授权流程如下:
注意: 这里的网站指的是 WebSite
。 作为区分,1-3准确的说是前端页面,4-6说的是后端。
用户点击完同意后,oauth(GitHub)就会跳转回你的网站(前端)。
此时,前端已经拿到了oauth发放的授权码(说的可能不准确,反正就是一个钥匙),然后你应该拿着这个授权码去请求后端用来处理的地址(我简单称其为 回调api)。
这个回调api的功能: 向GitHub请求令牌(注意这里的令牌token和你前后端交互的token是不一样的),比如 oauth的请求令牌地址为:https://github.com/login/oauth/access_token?
,参数如下:
client_id
:客户端的 IDclient_secret
:客户端的密钥code
:授权码后端请求了这个地址,oauth势必会返回一个响应(一般响应体是json),里面包含了令牌accessToken, 然后后端再把这个token返回前端(你也可以不返回,后端做个映射) 。至此整个oauth流程就算结束了(因为后端拿到了oauth发放的令牌)。
后话: 至于oauth给你令牌,你可以选择直接返回前端,你也可以不返回,具体操作看个人喜欢。
谢谢大佬的回答.我就是在后话中卡住了呢,由于是回调的,前端没能直接获取到accessToken.https://www.jianshu.com/p/da54bad42b30 我在帖子里找到了答案,在我自己的代码中已经实现了后端获取 accessToken后将其同步到前端.