Я пытаюсь аутентифицировать и авторизовать пользователей с помощью Passport.js с помощью Google API.У меня есть G Suite, и все мои пользователи являются частью организации G Suite.Я настроил кучу ролей в G Suite для использования с моим пользовательским приложением.
Аутентификационная часть в порядке и работает, как задумано.Проблема в том, что мне нужно сделать последующий вызов https://www.googleapis.com/admin/directory/v1/customer/customer/roleassignments
с userKey
вошедшего в систему пользователя, чтобы получить все настройки, которые есть у этого пользователя, и я не уверен, каков наилучший способ сделать это.
Вот так выглядят соответствующие части моего /login
маршрута:
passport.use(
new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.BASE_URL + '/login/google/callback'
},
function (accessToken, refreshToken, profile, done) {
return done(null, profile)
})
)
router.get('/', function (req, res, next) {
// Render the login button
})
router.get('/google',
passport.authenticate('google', {
scope: [
'email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly'
]
})
)
router.get('/google/callback', function (req, res, next) {
passport.authenticate('google', function (err, user, info) {
if (err) { return next(err) }
if (!user) { return res.redirect('/login?error=no_user') }
req.login(user, function (err) {
if (err) { return next(err) }
const accessToken = req.user.accessToken
// Maybe do something here?
return res.redirect('/')
})
})(req, res, next)
})
Я могу сохранить accessToken
в сеансе пользователя, когда получу его, и просто сделать обратный вызовиспользование токена в качестве токена на предъявителя, и это, вероятно, работает нормально, но так ли это на самом деле?Предоставляет ли Passport.js какой-то механизм, облегчающий последующие аутентифицированные вызовы?