gpt4 book ai didi

javascript - 应该如何验证从 SSR 到 Feathers JS API 的请求?

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:50 25 4
gpt4 key购买 nike

有关于如何从 SSR 访问 FeathersJS API 的示例,但它们缺乏有关如何授权此类请求的任何信息。可以为每个请求实例化feess-client应用程序吗?会不会太重了?

官方有example如何从服务器端调用feess API:

// Set up a socket connection to our remote API
const socket = io('http://api.feathersjs.com');
const api = client().configure(socketio(socket));

app.get('/messages', function(req, res, next){
api.service('messages')
.find({ query: {$sort: { updatedAt: -1 } } })
.then(result => res.render('message-list', result.data))
.catch(next);
});

但是如果消息服务需要经过身份验证的用户怎么办?我是否应该手动从 SSR 的 req 获取 token 并将其添加到 api 实例或 api.service 调用中?

考虑到 Node 的异步性质,这里持久的方法似乎是在 app.get '/messages' 处理程序中调用 client() ,这是一种假设的方法吗?

还不清楚 Feathers 样板示例之一是否具有持久的 SSR 身份验证,我已经描述过 here .

最佳答案

这是我如何让它工作的。

针对每个请求,SSR 在路由之前创建一个 API 适配器:

app.use('/', (req, res, next) => {
req.api = APIClient(req);
next();
});

APIClient 构造函数从 cookie 获取 token ,并使用 Feathers-authentication-client 插件提供的 set('accessToken', token) 方法设置它:

'use strict';

const feathers = require('feathers');
const superagent = require('superagent');
const hooks = require('feathers-hooks')
const feathers_rest = require('feathers-rest/client');
const auth_plugin = require('feathers-authentication-client');

const config = require('../config');

const host = clientUrl => (
__SERVER__ ? `http://${config.apiHost}:${config.apiPort}` : clientUrl
);

/* API adaptor constructor.
*/
module.exports = function APIClient(req) {
const api = feathers()
// REST plugin gives ability to query services over HTTP,
// superagent used as an isomorphic HTTPClient.
.configure(feathers_rest(host('/api')).superagent(superagent))
.configure(hooks())
// Auth plugin gives ability to set accessToken
.configure(auth_plugin())
;

if (__SERVER__) {
api.set('accessToken', req['cookies']['feathers-jwt']);
}
return api;
}

所以,这是我的页面加载流程:

  1. 当在浏览器中输入“my-app.com”时,它会向 SSR 发送 GET 请求,并在 Feathers-jwt Cookie 中传递访问 token 。
  2. SSR 创建一个 Feathers 客户端,从 Cookie 中获取访问 token ,并通过 api.set('accessToken', token) 方法将其提供给客户端。
  3. SSR 使用此客户端从 API 获取数据,并将其提供给模板引擎(pug/react 等)。
  4. SSR 将渲染的页面返回给浏览器。

另外,在向API请求时,需要在浏览器中设置token,因为如果是在其他域上,则不会有cookie,访问API时最好使用Authorization header或token参数。

讨论link .

关于javascript - 应该如何验证从 SSR 到 Feathers JS API 的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43157781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com