Comments on: [How To] Implement Passport.js Authentication with Sails.js https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/?utm_source=rss&utm_medium=rss&utm_campaign=implement-passport-js-authentication-with-sails-js yet another geek's blog Mon, 18 Nov 2019 08:09:31 +0000 hourly 1 https://wordpress.org/?v=6.5.3 By: Artem Pylypchuk https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-100507 Mon, 22 Dec 2014 13:03:49 +0000 http://www.geektantra.com/?p=366#comment-100507 In reply to Craig Roy.

The same applies to line #6, without this change session won’t work (silently).

]]>
By: Artem Pylypchuk https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-100506 Mon, 22 Dec 2014 13:01:49 +0000 http://www.geektantra.com/?p=366#comment-100506 Maybe this was a good example some time ago, but now it isn’t. It is extremely error-prone.
I used the working one from https://github.com/kasperisager/sails-generate-auth (thanks @Edygar), but made it simpler (I don’t need Facebook adapters or login with both username and e-mail).

Literally almost any piece of code I reused from this example had errors in it.

If you want to figure it out on your own, with invaluable educational experience, don’t read my comment any further, and try making it to work! 😉

First of all, in findById & findByUsername, you can’t do User.findOne(query).done() anymore, you have to do User.findOne(id, function (err, user) { … }); . In the case of findByUsername it trows an error, but findById fails silently (and you spend hours figuring out why session is not established after successful login).

Next,
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(user.password, salt, function(err, hash) {…} });
doesn’t work anymore (undocumented change in api?), one has to do
bcrypt.hash(user.password, 10, function (err, hash) {…});

Then, to set up the local strategy one has to declare something like this in services/passport.js and add it to config/bootstrap.js (a “passport.loadStrategies();” line):

passport.loadStrategies = function () {
this.use(new LocalStrategy({ passReqToCallback: true, usernameField: ’email’ },
function (req, username, password, done) {

Note: passReqToCallback is useful when you want to localize messages returned, e.g. with i18n
return done(null, false, {message: sails.__.apply(req, [‘Error.Passport.Password.Wrong’])});
otherwise, there will be no req object inside.

Custom middleware is best inserted through an “authenticated” policy, which has to set up session variables (req.isAuthenticated() doesn’t work), see how it’s done e.g. like in https://github.com/kasperisager/sails-generate-auth, but the example there with “sessionAuth” policy is incomplete and “req.session.authenticated” variable doesn’t get set, so one has to add some extra code into api/policies/passport.js.
Inserting middleware Express-style through config/passport.js is obsolete (one has to use “http” variable, not “express”) and seems to break interoperability of other middleware inside Sails.
It is possible to set custom middleware config through config/http.js, but I don’t think it is good to do it this way.

And so on, because I think I might have omitted something.
If you don’t want any headache just use https://github.com/kasperisager/sails-generate-auth (don’t forget to set req.session.authenticated somewhere in api/policies/passport.js). This might not be the best code, this is how I do it:

file api/policies/passport.js:
module.exports = function (req, res, next) {
// Initialize Passport
passport.initialize()(req, res, function () {
// Use the built-in sessions
passport.session()(req, res, function () {
//passport.authenticate(‘session’)(req, res, function () {
// Make the user available throughout the frontend
console.log(“passport.session called, user is “, req.user);
res.locals.user = req.user;
if (typeof req.user != ‘undefined’) req.session.authenticated = true;
else req.session.authenticated = false;
next();
});
});
};

]]>
By: jiarong https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-86681 Thu, 06 Nov 2014 02:41:42 +0000 http://www.geektantra.com/?p=366#comment-86681 This is a good example. (: helped me out real quick.

]]>
By: Edygar de Lima https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-86357 Wed, 05 Nov 2014 11:19:13 +0000 http://www.geektantra.com/?p=366#comment-86357 Quick tip: https://github.com/kasperisager/sails-generate-auth

]]>
By: Craig Roy https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-16981 Wed, 04 Jun 2014 18:31:52 +0000 http://www.geektantra.com/?p=366#comment-16981 .done in the passport.js service(line 18) will no longer work. It should be replaced with .exec instead.

]]>
By: Smit https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-4538 Wed, 16 Apr 2014 10:13:36 +0000 http://www.geektantra.com/?p=366#comment-4538 What about local registration process ?

]]>
By: Kamal Reddy https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-4488 Wed, 05 Feb 2014 14:14:40 +0000 http://www.geektantra.com/?p=366#comment-4488 In reply to JRMLSTF.

What following route? I dont see anything.

]]>
By: Purplebadger https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-4474 Fri, 06 Dec 2013 11:54:56 +0000 http://www.geektantra.com/?p=366#comment-4474 In reply to Purplebadger.

It does seem to be authenticating users, btw. I’m getting that error when I call req.logIn in the controller.

]]>
By: Purplebadger https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-4473 Fri, 06 Dec 2013 11:37:46 +0000 http://www.geektantra.com/?p=366#comment-4473 Thanks for this example, but I’m struggling with the following error:

Error: passport.initialize() middleware not in use

It appears Passport isn’t being initialised. I never see this message in the console when I start the app:

console.log(‘Express midleware for passport’);

Any suggestions very welcome. This is driving me mad. 🙁

]]>
By: Paul https://www.geektantra.com/2013/08/implement-passport-js-authentication-with-sails-js/#comment-4468 Mon, 02 Dec 2013 22:05:33 +0000 http://www.geektantra.com/?p=366#comment-4468 Thanks for sharing, good stuff.

typo in step 7

you have to change ok to next or next to ok

]]>