>  Q&A  >  본문

react.js - React + Node.js 怎么做第三方接口返回的中转页?

具体是这样的:

  1. 我在页面跳转到第三方接口(类似微博登录之类)

  2. 第三方接口返回数据后调用回调地址

  3. 回调地址判断返回错误数据

  4. 保存错误信息输出到中转页提示, 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还有其他方式来实现这个效果吗?
感激!!

怪我咯怪我咯2765일 전595

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 15:59:40

    首先谢邀
    react我不太懂,也没做过其它spa框架的服务器端渲染。。。
    不过可以帮你分析分析
    你的这个case类似我以前做过的使用github账号进行第三方登录(这里你用的是微博的三方登录),应该也是类似oauth2的这种约定。
    第一步,用户拍url到浏览器(或者点击登录),这里就称为是www.yourdomain.com/login这个路由吧
    第二步,服务器接受到/login路由,它会把一些appid啊,code啊,return_url之类的信息拼接在url之后,redirect到第三方的一个地址类似https://weibo.com/auth?appid=...的样子
    第三步,weibo服务器接受到这个get请求的参数验证没问题,则会调用return_url的这个路由,可能是post也可能是get总之会在url或者requestbody里给你一些信息,让你的server知道是你曾经授权的第三方网站传来的信息,这个时候其实经过2次握手,大家知己知彼,就相互信任了(有些第三方这个时候就会给你access_token有些还需要你再调用一次获得token)。
    第四步,这个时候你的server其实就可以获取第三方的用户账号等信息了。
    第五步,你的server已经获取了这些用户存储在第三方的信息,那还等什么,可以直接redirect或则render去给等待已久的浏览器返回响应了。

    这个时候你其实可以撇开什么第三方登录的包袱了(把你绕晕了,影响你判断的因素),你有的是什么?
    你的server已经拥有了第三方的用户信息,你就把这些信息当成是写在本地数据库的信息来处理好了,不管你前端用的是react还是别的库,不管你用没用什么服务器渲染,这些都没有毛关系,你就把它当成一次请求本地数据库的操作来处理就行了,该重定向就重定向,该render就render。

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:59:40

    你想想普通登录情况下用户信息是存哪里。

    要么存session,要么存redis。只不过前者会自动生成token然后设置cookie,后者需要你自己做。

    회신하다
    0
  • 취소회신하다