2016-09-22 36 views
1

我目前正在爲將在多個平臺上分發的應用程序開發基於Node/Express的API。因此,我需要根據令牌而不是會話/ cookie對用戶進行身份驗證/授權。使用PassportJS進行令牌驗證/授權

經過一番研究,我發現PassportJS是一個很棒的插件,用於完成這樣的事情。不幸的是,在閱讀了幾個小時的文檔之後,似乎沒有任何關於基於令牌的原始認證的很好的解釋。

我不想使用任何插件,如JWT - 只是Passport,Express和MongoDB。

我將如何去實現一個基於令牌的用戶授權系統與護照。我需要解釋令牌生成,令牌傳遞和其他過程。

請以清晰簡潔的方式回答這個問題,就好像你在向五年級學生解釋一樣。

謝謝:)

+0

爲什麼你不想使用庫來生成令牌? –

回答

0

我要去嘗試和你的問題分解成幾個部分:

  • 配置護照
  • 凡使用護照
  • 雜最後發言

首先有一點誤解。護照不會捆綁在令牌生成系統中。 Passport旨在配置您必須包含的依賴關係的策略。這樣做可以讓Passport本身輕而易舉。當您需要本地(用戶名和密碼)身份驗證策略時,我可能需要使用Twitter進行身份驗證。所以,護照既不包含。我安裝我需要的東西,並保持包裝尺寸較小。

TL; DR:沒有辦法不安裝Passport的插件。您需要包含某種策略

我打算假設你想使用本地策略。所以,你需要護照本地。別擔心,它是由Passport作者Jared Hanson撰寫的。

我使用的大部分內容都來自Passport文檔,具體爲here

讓我們看一下配置:

  • 安裝護照和護照本地模塊。
  • 確保Express,MongoDB,Node,npm等是最新的。

護照,當地看起來基本的配置文件是這樣的:

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
     User.findOne({ username: username), function(err, user) { 
      if (err) { return done(err); } 
      if (!user) { 
       return done(null, false, { message: 'Incorrect username.' }); 
      } 
      if (!user.validPassword(password)) { 
       return done(null, false, { message: 'Incorrect password.' }); 
      } 
      return done(null, user); 
     }); 
    } 
)); 

現在你需要放置一個形式的網頁上。這裏是一個非常簡單的例子:

<form action="/login" method="post"> 
    <div> 
     <label>Username:</label> 
     <input type="text" name="username" /> 
    </div> 
    <div> 
     <label>Password:</label> 
     <input type="password" name="password" /> 
    </div> 
    <div> 
     <input type="submit" value="Log In" /> 
    </div> 
</form> 

接下來,你需要在你的應用程序快捷的路線。請參閱Express Routing Documentation瞭解更多信息。在參數

app.post('/login', 
    passport.authenticate('local', { successRedirect: '/', 
            failureRedirect: '/login' }) 
); 

注意:默認情況下,LocalStrategy預計憑據是在一個名爲用戶名密碼參數。有其他配置選項可以命名它們,例如使用電子郵件而不是用戶名登錄。

+0

感謝您的迴應!看看代碼,我不認爲這可以處理令牌,或者我在這裏錯了嗎?這個例子是否依賴會話或cookie? – Developer990

+0

是的,如果這回答你的問題,如果你選擇它作爲答案,那將是非常棒的。如果沒有,你還有什麼問題嗎?
編輯:對不起,我不知何故錯過了該評論的後半部分。 *護照本地*確實使用會話。如果你想使用令牌,你需要另一種策略。讓我編輯答案以適應令牌。 – dkimot

+0

是否有可能使用基於令牌的認證策略 - 以及如何? – Developer990

相關問題