Я использую пример кода, показанный внизу этого поста в моем приложении Node.JS, для выполнения входа и аутентификации на основе Twitch OAuth:
https://github.com/twitchdev/authentication-samples/blob/master/node/index.js
Вход в систему работает без ошибок.Когда я захожу на страницу, я получаю кнопку «Connect with Twitch».Если я не вошел в систему, я получаю диалоговое окно авторизации Twitch и затем перенаправляюсь на свой URL обратного вызова.Если я вошел в систему, он успешно перенаправляет на мой URL-адрес обратного вызова для успешной аутентификации, не показывая мне диалоговое окно аутентификации Twitch.
Теперь мне нужен быстрый способ проверить, прошла ли аутентификация пользователя.Я нашел этот пост с ответом, в котором показано использование функции req.isAuthenticated () :
https://stackoverflow.com/questions/45093725/redirecting-to-previous-page-after-authentication-using-node-js-and-passport
Но эта функция всегда возвращает мне FALSE, даже если пользователь аутентифицирован.Какой код я могу использовать, чтобы быстро проверить, был ли пользователь аутентифицирован или нет с помощью Twitch?
Кроме того, если бы кто-то мог показать мне, как расширить проверку аутентификации с одной страницы до всех или группы моего узла.JS / Страницы приложения Express Я был бы признателен за это.
// -------------------- BEGIN: Twitch Authentication (OAuth) ------------
// The code in this section is courtesy of Amazon, licensed under the Apache 2.0 license:
//
// https://github.com/twitchdev/authentication-samples/blob/master/node/index.js
var session = require('express-session');
var passport = require('passport');
var OAuth2Strategy = require('passport-oauth').OAuth2Strategy;
var request = require('request');
var handlebars = require('handlebars');
// Initialize Express and middlewares
app.use(session({secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false}));
app.use(express.static('public'));
app.use(passport.initialize());
app.use(passport.session());
// Override passport profile function to get user profile from Twitch API
OAuth2Strategy.prototype.userProfile = function(accessToken, done) {
var options = {
url: 'https://api.twitch.tv/helix/users',
method: 'GET',
headers: {
'Client-ID': process.env.TWITCH_CLIENT_ID,
'Accept': 'application/vnd.twitchtv.v5+json',
'Authorization': 'Bearer ' + accessToken
}
};
request(options, function (error, response, body) {
if (response && response.statusCode == 200) {
done(null, JSON.parse(body));
} else {
done(JSON.parse(body));
}
});
}
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use('twitch', new OAuth2Strategy({
authorizationURL: 'https://id.twitch.tv/oauth2/authorize',
tokenURL: 'https://id.twitch.tv/oauth2/token',
clientID: process.env.TWITCH_CLIENT_ID,
clientSecret: process.env.TWITCH_SECRET,
callbackURL: process.env.CALLBACK_URL,
state: true
},
function(accessToken, refreshToken, profile, done) {
profile.accessToken = accessToken;
profile.refreshToken = refreshToken;
// Securely store user profile in your DB
//User.findOrCreate(..., function(err, user) {
// done(err, user);
//});
done(null, profile);
}
));
// Set route to start OAuth link, this is where you define scopes to request
app.get('/auth/twitch', passport.authenticate('twitch', { scope: 'user_read' }));
// Set route for OAuth redirect
app.get('/auth/twitch/callback', passport.authenticate('twitch', { successRedirect: '/', failureRedirect: '/' }));
// Define a simple template to safely generate HTML with values from user's profile
var template = handlebars.compile(`
<html><head><title>Twitch Auth Sample</title></head>
<table>
<tr><th>Access Token</th><td>{{accessToken}}</td></tr>
<tr><th>Refresh Token</th><td>{{refreshToken}}</td></tr>
<tr><th>Display Name</th><td>{{display_name}}</td></tr>
<tr><th>Bio</th><td>{{bio}}</td></tr>
<tr><th>Image</th><td>{{logo}}</td></tr>
</table></html>`);
// If user has an authenticated session, display it, otherwise display link to authenticate
// ROS: Access to page protected by Twitch login.
app.get('/test-twitch-login', function (req, res) {
if(req.session && req.session.passport && req.session.passport.user) {
res.send(template(req.session.passport.user));
} else {
res.send('<html><head><title>Twitch Auth Sample</title></head><a href="/auth/twitch"><img src="http://ttv-api.s3.amazonaws.com/assets/connect_dark.png"></a></html>');
}
});
/*
app.listen(3000, function () {
console.log('Twitch auth sample listening on port 3000!')
});
*/
// -------------------- END : Twitch Authentication (OAuth) ------------