Можно ли создать несколько учетных записей в веб-приложении node.js express, например, в качестве администратора и клиента, используя passport-google-oauth20 и, возможно, другие стратегии?
В настоящее время я пытаюсь создать сайт электронной коммерции, который имеет cms, у меня есть простая функция промежуточного программного обеспечения, которую я передаю по маршрутам, которые я хочу защитить, и вот эта функция:
function ensureUserIsAuthenticated(req, res, next){
if(req.user){ next()}
else{return res.redirect('/login')
Моя цель состоит в том, чтобы запретить клиентам входить в панель администратора с помощью Google Auth.
На данный момент у меня есть одна стратегия аутентификации Google, которую я использую.
Мой вопрос: нужно ли мне создавать другие стратегии? как мне отделить логику защиты?
/COOKIE SETUP
app.use(cookieSession({
maxAge: 30 * 24 * 60 * 60,
keys: [COOKIE.COOKIE_KEYS]
}))
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user)
}).catch(err => {
if (err) throw err
})
})
app.use(passport.initialize())
app.use(passport.session())
// GOOGLE AUTHENTICATION
passport.use(new GoogleStrategy({
clientID: GOOGLE.GOOGLE_CLIENT_ID,
clientSecret: GOOGLE.GOOGLE_CLIENT_SECRET,
callbackURL: ' /auth/google/callback'
}, (accessToken, refreshToken, profile, done) => {
User.findOne({
googleId: profile.id
}).then(user => {
if (user) {
//Already a member.
console.log('This User Exists')
done(null, user)
} else {
//Register new member
const user = new User({
googleId: profile.id
})
user.save().then(user => {
console.log('New Member Registered')
done(null, user)
}).catch(err => {
if (err) throw err;
})
}
}).catch(err => {
if (err) throw err;
})
}))
app.get('/login', (req, res, next) => {
res.status(200).render('login')
})
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email']
}))
app.get('/auth/google/callback', passport.authenticate('google'),
(req, res, next) => {
res.redirect('/products');
});
app.get('/api/current_user', isUserAuthenticated, (req, res, next) => {
res.send(req.user);
})
app.use(ordersRoute);
app.use(productsRoute);
app.get('/logout', (req, res, next) => {
req.logOut();
console.log('Youve been logged out')
res.redirect('/login')
})
OrdersRoutes представляют => Маршруты клиентов
ProductRoutes представляют => маршруты администратора