首頁  >  問答  >  主體

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还有其他方式来实现这个效果吗?
感激!!

怪我咯怪我咯2716 天前552

全部回覆(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
  • 取消回覆