Bon, donc en utilisant passport.js fonctionne, et fonctionne bien, d'après ce que j'ai vu. Cependant, je ne suis pas sûr de savoir comment exclure correctement certains utilisateurs. Si l'application est destinée à avoir un accès restreint, plutôt que de simplement fournir à l'utilisateur une méthode pour se connecter, comment puis-je restreindre le login via passport.js? En l'état, les utilisateurs peuvent simplement visiter le /login
et se connecter avec leur compte Google, obtenant ainsi l'accès aux internes.Restreindre l'accès de connexion - Passport.js, authentification Google
3
A
Répondre
9
Voici une façon de le faire, avec des commentaires tout au long. La principale chose est de comprendre cette page de l'auteur: http://passportjs.org/guide/authenticate/, que je vous expliquer un peu plus dans cet exemple ...
Il pourrait être plus facile à lire de bas en haut:
var authenticate = function(req, success, failure) {
// Use the Google strategy with passport.js, but with a custom callback.
// passport.authenticate returns Connect middleware that we will use below.
//
// For reference: http://passportjs.org/guide/authenticate/
return passport.authenticate('google',
// This is the 'custom callback' part
function (err, user, info) {
if (err) {
failure(err);
}
else if (!user) {
failure("Invalid login data");
}
else {
// Here, you can do what you want to control
// access. For example, you asked to deny users
// with a specific email address:
if (user.emails[0].value === "[email protected]") {
failure("User not allowed");
}
else {
// req.login is added by the passport.initialize()
// middleware to manage login state. We need
// to call it directly, as we're overriding
// the default passport behavior.
req.login(user, function(err) {
if (err) {
failure(err);
}
success();
});
}
}
}
);
};
Une idée est de envelopper le code ci-dessus dans un peu plus middleware, pour le rendre plus facile à lire:
// This defines what we send back to clients that want to authenticate
// with the system.
var authMiddleware = function(req, res, next) {
var success = function() {
res.send(200, "Login successul");
};
var failure = function(error) {
console.log(error);
res.send(401, "Unauthorized");
};
var middleware = authenticate(req, success, failure);
middleware(req, res, next);
};
// GET /auth/google/return
// Use custom middleware to handle the return from Google.
// The first /auth/google call can remain the same.
app.get('/auth/google/return', authMiddleware);
(tout cela suppose que nous utilisons express.)
0
Essayez ceci.
googleLogin: function(req, res) {
passport.authenticate('google', { failureRedirect: '/login', scope: ['https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email'] }, function(err, user) {
req.logIn(user, function(err) {
if (err) {
console.log(err);
res.view('500');
return;
}
var usrEmail = user['email'];
if(usrEmail.indexOf("@something.com") !== -1)
{
console.log('successful');
res.redirect('/');
return;
}
else
{
console.log('Invalid access');
req.logout();
res.view('403');
return;
}
});
})(req, res);
}
*
Questions connexes
- 1. Retour accesstoken après authentification OAuth dans passport.js
- 2. Authentification Google - Connexion
- 3. passport.js authentification réussie ne pas appeler next()
- 4. Passport.js équivalent pour Python?
- 5. Formulaires Authentification (restreindre une zone)
- 6. Google Authentification avec node.js et passport.js toujours en retour 401 (Non autorisé)
- 7. Authentification Google App Engine
- 8. tower.js avec passport.js exemple
- 9. Passport.js Échec de l'authentification
- 10. dynamique failureRedirect avec passport.js
- 11. Authentification Google avec Xamarin.Auth
- 12. authentification de connexion django
- 13. Authentification de connexion PHP
- 14. Authentification de connexion PHP
- 15. Authentification Google Apps
- 16. comment restreindre l'utilisateur sans connexion
- 17. Authentification Google avec nodejs
- 18. Authentification avec Google OAuth
- 19. asp.net authentification par formulaire restreindre l'accès au dossier
- 20. Authentification API Google
- 21. Ré-authentification de connexion Facebook
- 22. Authentification de connexion dans Ionic2
- 23. PRE_AUTH_FILTER + Authentification formulaire de connexion
- 24. Authentification de connexion Php/Mysql
- 25. Problème Connexion authentification Windows
- 26. Firebase Connexion authentification
- 27. Nom d'utilisateur multiple passport.js
- 28. Passport.js remember me fonctionnalité
- 29. sails.js + passport.js: gérer des sessions
- 30. Authentification de l'API Google Data
Wow, je suis désolé. Je n'ai jamais accepté ça. – skeggse