多くの Web サイトの認証に、ユーザーID/パスワード認証が使われています。この認証メカニズムは passport-local モジュールによって提供されています。
The most widely used way for websites to authenticate users is via a username and password. Support for this mechanism is provided by the passport-local module.
$ npm install 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: 'ユーザーIDが間違っています。' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'パスワードが間違っています。' });
}
return done(null, user);
});
}
));
検証用コールバックには、アプリケーションのログインフォームによって送信されてきた username
と password
が引数として与えられています。
The verify callback for local authentication acceptsusername
andpassword
arguments, which are submitted to the application via a login form.
ユーザーは Web ページ上のフォームから認証情報を入力できます。
A form is placed on a web page, allowing the user to enter their credentials and log in.
<form action="/login" method="post">
<div>
<label>ユーザーID:</label>
<input type="text" name="username"/>
</div>
<div>
<label>パスワード:</label>
<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="ログイン"/>
</div>
</form>
ログインフォームの内容は POST
メソッドでサーバーに送信されます。
local
ストラテジーでログイン要求を処理するためには、authenticate()
を使います。
The login form is submitted to the server via thePOST
method. Usingauthenticate()
with thelocal
strategy will handle the login request.
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login',
failureFlash: true })
);
検証用コールバック内で指定した message
オプションで error
メッセージなどをフラッシュメッセージとして表示するには、failureFlash
オプションを true
にしてください。
Setting thefailureFlash
option totrue
instructs Passport to flash anerror
message using themessage
option set by the verify callback above. This is helpful when prompting the user to try again.
LocalStrategy
は認証情報を username
と password
の2つのパラメータ名で確認しています。
別のフィールド名を使っている場合は、確認するパラメータ名を変更してください。
By default,LocalStrategy
expects to find credentials in parameters namedusername
andpassword
. If your site prefers to name these fields differently, options are available to change the defaults.
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'passwd'
},
function(username, password, done) {
// ...
}
));