[node.js]ログイン(2)-passport使用例


passport使用例

1.passportのインストールと設定


-モジュールの読み込み


npm i passport passport-local passport-mongoose express-session
(ヒント:コンピュータが速いほど、インストール速度が速くなります.)
インストール後、必要なモジュールがロードされます.
const session = require("express-session")
const LocalStrategy = require("passport-local")
const passport = require("passport")
その後、モデルフォルダを個別に指定すると、モデルが作成されます.jsファイルでは、
そうでなければappjsファイルにpassport-local-mongoseモジュールをロードすればいいです.(後でMVCモードで再梱包するのがおっくうなら、モデルフォルダを作成しておきます.)
const passportLocalMongoose = require("passport-local-mongoose")

-設定


(設定部のユーザがユーザモデルを指すと仮定)
モジュールを上にロードした同じファイルでplugin設定も完了しました.
UserSchema.plugin(passportLocalMongoose)
app.use(
  session({
    secret: "secret is secret.",
    resave: false,
    saveUninitialized: false,
  }),
)
app.use(passport.initialize())
app.use(passport.session())
passport.use(new LocalStrategy(User.authenticate()))
これはpassportにLocalStrategyの使用を要求する部分です.
passportにはusernameという変数が必要です.
ユーザー名なしでログインを設定するには、Eメールとパスワードのみを使用します.
UserSchema.plugin(passportLocalMongoose, {usernameField: "email"})
前に示したように、オプションを追加できます.
次の手順では、上記のオプションを追加して、ユーザー名をemailに置き換えます.

- serialize

passport.serializeUser(User.serializeUser())
passport.deserializeUser(User.deserializeUser())
このセッションでは、ユーザーにシーケンス化された部分を設定します.
上記のすべての手順を経て、インストールを完了します.

2.会員収入

const user = new User({ email : "[email protected]" })
const newUser = await User.register(user, "1234")
1234はテストパスワードです.
実際の過程でreq.body.passwordなどで実現すればよい.
その結果、上図のように会員加入が成功したことがわかります.

3.ログイン

app.post("/login", 
  passport.authenticate("local", { failureRedirect: "/login" }), (req, res) => {
    res.redirect("/home")
  }
)
上記ミドルウェアによりログインを実現します.
失敗した場合は、/loginにリダイレクトします.

4.ログアウト


bcryptに比べて、設定や進行が少し難しいと感じるかもしれません.
これからは、その苦労を輝かせる時だ.🌟
app.get("/logout", (req, res) => {
  req.logout()
  res.redirect("/login")
})
これは間違いなく世界で最も簡単なログアウトコードです.

5.認証


ひかりじかん🌟(2)
app.get("/auth", (req, res) => {
  if (req.isAuthenticated()) {
    res.render("auth")
  } else {
    res.redirect("/login")
  }
})
ユーザが認証を受けるか否かを簡単なコードで判断する、
接近をコントロールできる!

6.認証ミドルウェアの作成


多くの場合、認証を使用できます.
ミドルウェアを作成および管理すると、より便利になる可能性があります.
middleware.jsでミドルウェアを作成した後
module.exports.isLoggedIn = (req, res, next) => {
  if(!req.isAuthenticated()){
    return res.redirect("/login")
  }
  next()
}
app.jsは対応するミドルウェアをロードします.
const { isLoggedIn } = require("./middleware")
そして、前に光の認証部分を見て、ミドルウェアを使います
app.get("/auth", isLoggedIn, (req, res) => {
  res.render("auth")
})
三つ目の明かりが見える🌟
(まぶしい!)