我正在添加一个auth图层,我想除了一个棘手的细节之外我已经弄清楚了。
我的Meteor应用程序没有任何路由,但我已经在连接中间件中添加了一个钩子,以便" /"如果没有正确的API令牌,则会出现路由错误。如果令牌没问题,那么我打电话next()
将路线转发给Meteor。
问题在于,根据令牌,我需要为连接设置服务器端参数,而我不知道如何执行此操作。例如,假设我有一个映射到权限级别的静态API密钥列表。如果用户使用" ADMIN_API_KEY"发送请求然后我想设置Session.permission_level = "admin"
以供Meteor服务器的功能使用。 Session
仅适用于Meteor中的客户端。
# this code's in coffeescript
WebApp.connectHandlers.use '/', (req, res, next) ->
validator = new RequestValidator(req, next)
validations = [
"valid_namespace",
"only_https"
]
error = validator.validate(validations)
next(error)
# <<<<<<<<<<<<<<<<<<<<<<<<
# Here I want to set some config option which can be
# read by the server in the same way it can read things like
# Meteor.user()
在Rails中,我只想说session[:permission_level] = "admin"
。但它似乎在Meteor中不起作用。
顺便说一下,我还没有在Meteor中使用路由包,不过如果这样做会比我更容易。
答案 0 :(得分:1)
我不确定Session
我做过像
import { DDP } from 'meteor/ddp';
import { DDPCommon } from 'meteor/ddp-common';
export const authMiddleware = (req, res, next) => {
const userId = identifyUser(req); // parse the request to get the token you expect
if (!userId) {
return next();
}
DDP._CurrentInvocation.withValue(new DDPCommon.MethodInvocation({
isSimulation: false,
userId,
}), () => {
next();
// in that context, Meteor.userId corresponds to userId
});
};
对于我的REST api,这对于用户ID很有效,并且能够调用应该在DDP上下文中调用的Meteor函数,例如Users.find(...)
。