2017-03-08 45 views
1

我有一個流星應用程序,我使用nginx與內部SSO服務進行身份驗證。我能夠成功地完成這項工作,並在服務器Meteor.onConnection方法的nginx set http標題中檢索用戶詳細信息。流星 - 自動發起客戶端登錄

在這一點上,我不知道什麼是最好的方法是訪問客戶端的用戶細節。我覺得我應該使用內置的流星帳戶,但我不知道如何從客戶端啓動登錄過程,因爲用戶實際上不會通過Meteor客戶端登錄,而是通過通過nginx發生的重定向登錄。我覺得我需要一種方法來自動啓動流星端的登錄過程,以適當地設置meteor.users集合,但我無法想出一個辦法來做到這一點。

回答

1

結帳答案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') 
     } 
    }, 
}); 
+0

哪裏,我會添加客戶端代碼,以便它時,將觸發新的用戶點擊應用程序的幫助下在客戶端登錄? –

+0

你可以在'Meteor.startup(...)'中的client/main.js中或在lib/router這樣的導入共享文件中的if(Meteor.isClient()){...}中執行。 js或'Router.config'的'waitOn'如果你正在使用Iron Router ... – mutdmour

+0

你也可以在'/ login'路由的'waitOn'或'action'中做如果你有這個路由,因爲這是路由這在我的例子中被調用(如果你正在使用鐵路路由器) – mutdmour