由于loopback.getCurrentContext()
存在长期不稳定问题并且目前已被弃用,如何确保当用户通过API端点执行某些操作时,我知道如何识别他?
可能我可以在请求有效负载中发送令牌ID并检查它吗?如果用户假货怎么办? Github问题页面上那些hacky解决方案的替代方案是什么?
答案 0 :(得分:0)
查看https://docs.strongloop.com/display/public/LB/Making+authenticated+requests
总之,一旦您在其中记录了用户,就应该在响应中返回一个AccessToken。 然后,您可以在标题或查询字符串中使用它来证明您是登录用户:
# Authorization Header
curl -X GET -H "Authorization: $ACCESS_TOKEN" \
http://localhost:3000/api/widgets
# Query Parameter
curl -X GET http://localhost:3000/api/widgets?access_token=$ACCESS_TOKEN
这不容易被伪造,因为在每个请求上检查访问令牌以确保它是当前有效的。
完成此操作后,您可以访问accessToken(取自https://github.com/strongloop/loopback/issues/569#issuecomment-60924099,除非将用户附加到req对象)
app.use(function(req, res, next) {
app.currentUser = null;
if (!req.accessToken) return next();
req.accessToken.user(function(err, user) {
if (err) return next(err);
req.currentUser = user;
next();
});
});
将此添加到您的server.js
或启动脚本中,因此user
上的ctx.req.currentUser
对象随时都有。