具体是这样的:
我在页面跳转到第三方接口(类似微博登录之类)
第三方接口返回数据后调用回调地址
回调地址判断返回错误数据
保存错误信息输出到中转页提示, 3秒后自动跳转
node.js
使用的是koa 2
,具体的跳转是这样的:
[GET] /index -> [weibo] -> [POST] /oauth -> [GET] /cart
需求看起来其实简单,但是在实现的过程中总觉得不是很好实现(?)
因为我用的是React
,所以我在服务器也做了服务器渲染,因此不能直接使用类似res.render()
的方法
所以现在出现的问题是,当[weibo]
跳转到/oauth
,在/oauth
返回了一些JSON
的信息,类似这样:
{
code: '10000',
message: '数据异常'
}
然后重定向到/cart
输出错误信息.
但是在这个过程中JSON
数据要怎么保存?
因为会重定向所以无法用ctx.res.err
这样的方式做传递
那么除了用session
还有其他方式来实现这个效果吗?
感激!!
巴扎黑2017-04-17 15:59:40
우선 초대해주셔서 감사합니다
저는 React에 대해 잘 모르고, 다른 스파 프레임워크에서 서버사이드 렌더링을 해본 적이 없습니다. . .
하지만 분석하는 데 도움을 드릴 수 있습니다
귀하의 사례는 제가 제3자 로그인을 위해 github 계정을 사용하기 전에 했던 것과 유사합니다(여기서는 Weibo의 제3자 로그인을 사용하고 있습니다). oauth2 규칙.
첫 번째 단계에서는 사용자가 브라우저에 URL을 전송합니다(또는 로그인을 위해 클릭).
두 번째 단계는 서버가 /를 수신하는 것입니다. 로그인 경로를 사용하면 URL 뒤에 일부 appid, code, return_url 및 기타 정보를 연결하고 https://weibo.com/auth?appid=...的样子
과 유사한 제3자 주소로 리디렉션됩니다. 세 번째 단계에서 weibo 서버는 get 요청을 받습니다. 매개변수 확인이 정상이면 return_url 경로가 호출되며, 이는 post 또는 get일 수 있습니다. 즉, URL 또는 요청 본문에 일부 정보를 제공하여 해당 정보가 제3자로부터 온 것임을 서버에 알립니다. 귀하가 승인한 파티 웹사이트. 이때 두 번의 악수 후에는 모두가 서로를 알고 서로를 신뢰합니다(이때 일부 제3자는 귀하에게 access_token을 제공하고 일부는 토큰을 얻기 위해 다시 전화해야 합니다).
네 번째 단계는 이때 귀하의 서버가 실제로 제3자 사용자 계정 및 기타 정보를 얻을 수 있다는 것입니다.
다섯 번째 단계는 서버가 제3자에 저장된 사용자 정보를 얻었는데 무엇을 기다리고 있습니까? 오랫동안 기다려온 브라우저에 응답을 반환하기 위해 직접 리디렉션하거나 렌더링할 수 있습니다.
이때 실제로 제3자 로그인에 대한 부담(귀하를 혼란스럽게 하고 판단에 영향을 미치는 요소)을 미뤄둘 수 있는 것은 무엇입니까?
귀하의 서버에는 이미 타사 사용자 정보가 있으므로 이 정보를 로컬 데이터베이스에 기록된 정보로 처리할 수 있으며, 프론트엔드에서 반응이나 다른 라이브러리를 사용하든, 사용하든 사용하지 않든 상관없습니다. 일종의 서버 렌더링입니다. 로컬 데이터베이스를 요청하는 작업으로 처리하면 리디렉션이 필요할 때 리디렉션되고 렌더링이 필요할 때 렌더링됩니다.
天蓬老师2017-04-17 15:59:40
일반적인 로그인 중에 사용자 정보가 어디에 저장되는지 생각해 보세요.
세션을 저장하거나 Redis를 저장하세요. 전자는 자동으로 토큰을 생성한 다음 쿠키를 설정하는 반면, 후자는 사용자가 직접 수행해야 합니다.