簡體   English   中英

使用PassportJS進行令牌認證/授權

[英]Token Authentication/Authorization With PassportJS

我目前正在為將在多個平台上分發的應用程序開發基於Node / Express的API。 因此,我需要根據令牌而不是會話/ cookie來驗證/授權用戶。

經過一些研究,我發現PassportJS是一個很棒的插件,可以完成這樣的事情。 不幸的是,經過幾個小時的文檔后,對基於令牌的原始身份驗證似乎沒有任何好的解釋。

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

我將如何使用Passport實現基於令牌的用戶授權系統。 我需要有關令牌生成,令牌傳遞和其余過程的解釋。

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

謝謝 :)

我將嘗試將您的問題分解為幾個部分:

  • 配置Passport
  • 在哪里使用Passport
  • 其他最后的評論

首先,有點誤解。 Passport沒有與令牌生成系統捆綁在一起。 Passport旨在配置必須包含為依賴項的策略。 這樣做是為了使Passport本身可以輕巧且模塊化。 當您需要本地(用戶名和密碼)身份驗證策略時,我可能需要通過Twitter進行身份驗證。 因此,Passport既不包括。 我安裝了我需要的東西,並保持包裝尺寸輕。

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

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

我使用的大部分內容都來自Passport文檔,特別是在這里

我們來看看配置:

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

passport-local的基本配置文件如下所示:

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應用中使用路線。 有關其工作原理的詳細信息,請參閱Express Routing Documentation

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

有關參數的注意事項:默認情況下, LocalStrategy希望憑據位於名為usernamepassword的參數中。 除此之外,還有一些配置選項可以命名,例如使用電子郵件而不是用戶名登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM