Node.jsとExpressを使ってログイン認証機能を実装しています。
ログイン判定時に画面上部のヘッダーにマイページとログアウトのリンクが出るようにしたいです。
テンプレートエンジン(hbs)を使っているので、header.hbsの内部でif文を使って分岐させればよいと思うのですが、クライアント側からログイン判定をする方法がわかりません。
ログイン認証にはPassport.jsのローカルストラテジを使用しています。
アドバイスを頂けると嬉しいです。
JavaScript
1const express = require('express'); 2const path = require('path'); 3require('./db/mongoose'); 4const hbs = require('hbs'); 5const session = require('express-session'); 6const passport = require('passport'); 7 8const app = express(); 9const port = process.env.PORT || 3000; 10 11const publicDirectoryPath = path.join(__dirname, '../public'); 12const viewsPath = path.join(__dirname, '../templates/views'); 13const partialsPath = path.join(__dirname, '../templates/partials'); 14 15const User = require('./models/userModel'); 16 17app.set('view engine', 'hbs'); 18app.set('views', viewsPath); 19hbs.registerPartials(partialsPath); 20 21app.use(express.static(publicDirectoryPath)); 22app.use(express.json()); 23app.use(express.urlencoded({ extended: true })); 24 25app.use(session({ 26 secret: 'hogehoge', 27 resave: false, 28 saveUninitialized: false, 29})); 30 31app.use(passport.initialize()); 32app.use(passport.session()); 33 34passport.use(User.createStrategy()); 35 36passport.serializeUser(User.serializeUser()); 37passport.deserializeUser(User.deserializeUser()); 38 39app.listen(port, () => { 40 console.log(`Server is up on port${port}`); 41}); 42 43app.get('/', (req, res) => { 44 res.render('home'); 45}); 46 47app.get('/register', (req, res) => { 48 res.render('register'); 49}); 50 51app.get('/login', (req, res) => { 52 res.render('login'); 53}); 54 55app.get('/home', (req, res) => { 56 if (req.isAuthenticated()) { 57 res.render('home'); 58 } else { 59 res.redirect('/init'); 60 } 61}); 62 63app.post('/register', async (req, res) => { 64 const { username, gender } = req.body; 65 66 try { 67 await User.register({ username, gender }, req.body.password); 68 } catch (e) { 69 res.status(400).send(e); 70 } 71 72 passport.authenticate('local')(req, res, () => { 73 res.render('home'); 74 }); 75}); 76 77app.post('/login', async (req, res) => { 78 const user = new User(req.body); 79 80 req.login(user, (err) => { 81 if (err) { 82 res.status(400).send(); 83 } else { 84 passport.authenticate('local')(req, res, () => { 85 res.render('home'); 86 }); 87 } 88 }); 89}); 90
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。