[英]Token Authentication/Authorization With PassportJS
我目前正在為將在多個平台上分發的應用程序開發基於Node / Express的API。 因此,我需要根據令牌而不是會話/ cookie來驗證/授權用戶。
經過一些研究,我發現PassportJS是一個很棒的插件,可以完成這樣的事情。 不幸的是,經過幾個小時的文檔后,對基於令牌的原始身份驗證似乎沒有任何好的解釋。
我不想使用任何插件,如JWT - 只是Passport,Express和MongoDB。
我將如何使用Passport實現基於令牌的用戶授權系統。 我需要有關令牌生成,令牌傳遞和其余過程的解釋。
請以清晰簡潔的方式回答這個問題,就像您向五年級學生解釋一樣。
謝謝 :)
我將嘗試將您的問題分解為幾個部分:
首先,有點誤解。 Passport沒有與令牌生成系統捆綁在一起。 Passport旨在配置必須包含為依賴項的策略。 這樣做是為了使Passport本身可以輕巧且模塊化。 當您需要本地(用戶名和密碼)身份驗證策略時,我可能需要通過Twitter進行身份驗證。 因此,Passport既不包括。 我安裝了我需要的東西,並保持包裝尺寸輕。
TL; DR:沒有辦法不為Passport安裝插件。 你需要包含某種策略 。
我假設您想要使用本地策略。 所以,你需要護照本地 。 別擔心,它是由Passport的作者Jared Hanson編寫的。
我使用的大部分內容都來自Passport文檔,特別是在這里 。
我們來看看配置:
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希望憑據位於名為username和password的參數中。 除此之外,還有一些配置選項可以命名,例如使用電子郵件而不是用戶名登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.