🛂
Passport
初めてpassportを実装するときに公式ドキュメントを自分なりにわかやすくまとめてみたものです。せっかくなのでアウトプットしようと思い、記事として公開しました。
passport公式ドキュメント
Local Strategyについて
実装例
passport.use(
new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
}, async (email, password, done) => {
try {
const user = await prisma.user.findUnique({
where: { email }
});
if (!user) {
return done(null, false, { message: 'Incorrect email.' });
}
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
} catch (error) {
return done(error);
}
}));
passport.use
の第1引数にLocal Strategyを指定することで利用できる。
- LocalStrategyの引数、
usernameField
とpasswordField
のオプションを設定することで、LocalStrategy
において認証に使用するフィールドを指定する。
passport.use
の第2引数には実際の認証システムを記載する。
- ユーザー名とパスワードを受け取り、その情報を元にデータベースなどからユーザー情報を検索し、認証の成功または失敗を決定する。最終的な結果を
done
コールバック関数を通じてPassport.jsに返す。 - done関数について
-
第1引数: エラーが発生した場合にエラーオブジェクトを渡す。エラーがない場合は
null
を渡す。 -
第2引数: 認証が成功した場合にはユーザーオブジェクトを渡す。認証が失敗した場合には
false
を渡す。 -
第3引数(オプション): 認証に失敗した場合に、追加の情報を含むオブジェクトを渡すことができる。例えば、エラーメッセージを指定することができる。
- 実装例
- ユーザーが見つからない場合:
done(null, false, { message: 'Incorrect email.' })
- 第1引数は
null
で、エラーはないことを示す。 - 第2引数は
false
で、認証が失敗したことを示す。 - 第3引数は
{ message: 'Incorrect email.' }
で、エラーメッセージを提供する。
- 第1引数は
- パスワードが間違っている場合:
done(null, false, { message: 'Incorrect password.' })
- 同様に、エラーはなく、認証失敗の情報とエラーメッセージを含んでいる。
- ユーザーが見つかり、パスワードも正しい場合:
done(null, user)
- 第1引数は
null
で、エラーはないことをす。 - 第2引数は
user
オブジェクトで、認証が成功したことを示す。 - 第3引数は省略されている。
- 第1引数は
- ユーザーが見つからない場合:
- 実装例
- オプションでそれぞれのストラテジーに名前を付けることができる
- 以下の実装ではgoogle-adminとして明示することができるが、LocalStrategy・JwtStrategyではlocal、jwtという名前でデフォルトで呼び出すことができる。
-
第1引数: エラーが発生した場合にエラーオブジェクトを渡す。エラーがない場合は
passport.use('google-admin', new GoogleStrategy({
clientID: ADMIN_GOOGLE_CLIENT_ID,
clientSecret: ADMIN_GOOGLE_CLIENT_SECRET,
callbackURL: "/auth/google/admin/callback"
}, function(accessToken, refreshToken, profile, cb) {
// 管理者用アカウントの認証ロジック
}));
Discussion