nginx Meteor -自动启动客户端登录

fquxozlt  于 8个月前  发布在  Nginx
关注(0)|答案(1)|浏览(74)

我有一个meteor应用程序,我使用nginx和内部SSO服务进行身份验证。我能够成功地做到这一点,并在服务器Meteor.onConnection方法上的nginx set http header中检索用户详细信息。
在这一点上,我不确定在客户端访问用户详细信息的最佳方法是什么。我觉得我应该使用内置的流星帐户,但我不知道如何从客户端启动登录过程,因为用户实际上不会通过流星客户端登录,而是通过nginx进行重定向。我觉得我需要一种方法来自动启动登录过程的流星方面设置适当的流星。用户收集,但我不能想出一个办法来做到这一点。

hjzp0vay

hjzp0vay1#

查看答案here您可以通过nginx将userId(或任何您想要传递的用户)传递到服务器,然后到客户端登录。您可以在Webapp.connectHandler中生成并插入令牌。

import { Inject } from 'meteor/meteorhacks:inject-initial';
// server/main.js
Meteor.startup(() => {
    WebApp.connectHandlers.use("/login",function(req, res, next) {
      Fiber(function() {
        var userId = req.headers["user-id"]
        if (userId){
           var stampedLoginToken = Accounts._generateStampedLoginToken();
           //check if user exists
           Accounts._insertLoginToken(userId, stampedLoginToken);
           Inject.obj('auth', {
             'loginToken':stampedLoginToken
           },res);             
           return next() 
        }
      }).run()
    })       
}

现在,您可以在meteor-inject-initial package的帮助下登录客户端

import { Inject } from 'meteor/meteorhacks:inject-initial';
// iron router
Router.route('/login', {
    action: function() {
        if (!Meteor.userId()){
            Meteor.loginWithToken(Inject.getObj('auth').loginToken.token, 
                function(err,res){
                    if (err){
                        console.log(err)
                    }
                }
            )
        } else {
            Router.go('/home')
        }
    },
});

相关问题