Pat*_*Pat 8 meteor iron-router
对于仅服务器路由,如何获取当前用户.
请注意这是一条看起来像这样的路线:
this.route('report_access', {
path: '/report/:humanId?/:reportKey',
where: 'server',
action: ....
});
Run Code Online (Sandbox Code Playgroud)
这不在发布或方法调用中,因此Meteor.user()/ Meteor.userId()失败.
我查看了route.params并且没有设置用户ID.
这适用于0.8:
if(this.request.cookies.meteor_login_token)
u = Meteor.users.findOne({"services.resume.loginTokens.hashedToken": Accounts._hashLoginToken(this.request.cookies.meteor_login_token)});
我基本上使用Accounts._hashLoginToken()允许与存储在DB中的散列令牌匹配的函数对原始Meteor登录令牌进行哈希处理.
当您登录时,如果没有在客户端设置cookie,则无法在服务器端执行此操作.
Meteor将用户的身份验证令牌存储在localStorage中,该令牌在HTTP头阶段不可用,仅在页面加载到客户端javascript之后.
如果要以您正在执行的方式访问标头中的值,则必须在用户使用用户令牌登录时设置cookie.
用户令牌位于localstorage/Meteor.loginToken&user Id at Meteor.userId().
然后使用请求标头检查此值,并users在mongodb 中的集合中的用户存储的标记中查找标记services.resume.loginToken.
这样做有一个相当大的安全警告,因为您的loginToken更加暴露,可用于访问该帐户.
Meteor通过websockets建立DDP连接.当网页加载了之前"已保存"的登录状态时,将使用带有localstorage api的javascript读取这些loginTokens.DDP是Meteor用于与服务器通信的websockets或sockj上的通信层.
在加载javascript后,通过DDP协议进行登录.这是您不能直接使用服务器端路由执行此操作的主要原因,因为您无法以这种方式访问DDP,因为Meteor的库不可用,并且在发送http请求时此时未建立DDP连接.
Meteor的调用和订阅方法使用此登录进行身份验证,以在服务器上发布所有在DDP线路上发生的方法.
这个答案应该详细说明如何进行登录:通过DDP(和SRP?)通过Meteor进行身份验证
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |