Passport authenticate is stuck and does not return any value
up vote
0
down vote
favorite
This authenticate works fine
app.post('/login', passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
)
);
but I'm trying to validate the fields of the form before the authentication using express-validator.
I came with that
app.post('/login', function(req, res)
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)
);
Using this second code, nothing happens when I submit the form and the client gives the error message localhost didn't send any data after a while. The first part works fine, I can see all the errors when I submit an empty form and the authenticate method is reached. I suspect this question might partially answer mine or is kind of related, but I can't understand it.
The passport.js documentation provides an example with a function but the function gets called only when the authentication is successful, so after. I'd like to perform the field validation before the authentication.
Let me know if you need the passport.authenticate code.
javascript node.js express express-validator
add a comment |
up vote
0
down vote
favorite
This authenticate works fine
app.post('/login', passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
)
);
but I'm trying to validate the fields of the form before the authentication using express-validator.
I came with that
app.post('/login', function(req, res)
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)
);
Using this second code, nothing happens when I submit the form and the client gives the error message localhost didn't send any data after a while. The first part works fine, I can see all the errors when I submit an empty form and the authenticate method is reached. I suspect this question might partially answer mine or is kind of related, but I can't understand it.
The passport.js documentation provides an example with a function but the function gets called only when the authentication is successful, so after. I'd like to perform the field validation before the authentication.
Let me know if you need the passport.authenticate code.
javascript node.js express express-validator
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
This authenticate works fine
app.post('/login', passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
)
);
but I'm trying to validate the fields of the form before the authentication using express-validator.
I came with that
app.post('/login', function(req, res)
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)
);
Using this second code, nothing happens when I submit the form and the client gives the error message localhost didn't send any data after a while. The first part works fine, I can see all the errors when I submit an empty form and the authenticate method is reached. I suspect this question might partially answer mine or is kind of related, but I can't understand it.
The passport.js documentation provides an example with a function but the function gets called only when the authentication is successful, so after. I'd like to perform the field validation before the authentication.
Let me know if you need the passport.authenticate code.
javascript node.js express express-validator
This authenticate works fine
app.post('/login', passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
)
);
but I'm trying to validate the fields of the form before the authentication using express-validator.
I came with that
app.post('/login', function(req, res)
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)
);
Using this second code, nothing happens when I submit the form and the client gives the error message localhost didn't send any data after a while. The first part works fine, I can see all the errors when I submit an empty form and the authenticate method is reached. I suspect this question might partially answer mine or is kind of related, but I can't understand it.
The passport.js documentation provides an example with a function but the function gets called only when the authentication is successful, so after. I'd like to perform the field validation before the authentication.
Let me know if you need the passport.authenticate code.
javascript node.js express express-validator
javascript node.js express express-validator
asked Nov 11 at 23:26
Long Halloween
32
32
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
accepted
passport.authenticate
is a function. In your first (working) code, you're calling it as middleware, where it gets passed objects for (req, res, next) as parameters.
With your second code, you're trying to call it directly and without parameters, and the client is timing out because it's not getting a response.
If I'm not missing something, you may be able to make this work by passing (req, res) to it, like this:
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)(req, res, next);
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
add a comment |
up vote
0
down vote
I had exactly the same code and issue whilst trying to introduce express-validator.
I can confirm that adding the additional "(req, res, next);" to the end of the passport.authenticate function does allow the authentication process to complete and /login to process.
However there seems to be no additional user added to the database after passport has authenticated with this method alone. I think a custom callback for passport is required e.g.:
http://www.passportjs.org/docs/authenticate/
Example of use: https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254274%2fpassport-authenticate-is-stuck-and-does-not-return-any-value%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
passport.authenticate
is a function. In your first (working) code, you're calling it as middleware, where it gets passed objects for (req, res, next) as parameters.
With your second code, you're trying to call it directly and without parameters, and the client is timing out because it's not getting a response.
If I'm not missing something, you may be able to make this work by passing (req, res) to it, like this:
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)(req, res, next);
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
add a comment |
up vote
0
down vote
accepted
passport.authenticate
is a function. In your first (working) code, you're calling it as middleware, where it gets passed objects for (req, res, next) as parameters.
With your second code, you're trying to call it directly and without parameters, and the client is timing out because it's not getting a response.
If I'm not missing something, you may be able to make this work by passing (req, res) to it, like this:
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)(req, res, next);
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
passport.authenticate
is a function. In your first (working) code, you're calling it as middleware, where it gets passed objects for (req, res, next) as parameters.
With your second code, you're trying to call it directly and without parameters, and the client is timing out because it's not getting a response.
If I'm not missing something, you may be able to make this work by passing (req, res) to it, like this:
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)(req, res, next);
passport.authenticate
is a function. In your first (working) code, you're calling it as middleware, where it gets passed objects for (req, res, next) as parameters.
With your second code, you're trying to call it directly and without parameters, and the client is timing out because it's not getting a response.
If I'm not missing something, you may be able to make this work by passing (req, res) to it, like this:
if (validationErr)
res.render('login',
errors: validationErr,
failureFlash: true
);
else
// authenticate once fields have been validated
passport.authenticate('local-login',
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
)(req, res, next);
answered Nov 11 at 23:44
Jim B.
2,6561928
2,6561928
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
add a comment |
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
As pointed in Jim’s answer the key here is the final (req,req,next) since passport.authenticate is a middleware, you need to call the req,res,next) and pass back a res for the function
– Pari Baker
Nov 12 at 1:42
add a comment |
up vote
0
down vote
I had exactly the same code and issue whilst trying to introduce express-validator.
I can confirm that adding the additional "(req, res, next);" to the end of the passport.authenticate function does allow the authentication process to complete and /login to process.
However there seems to be no additional user added to the database after passport has authenticated with this method alone. I think a custom callback for passport is required e.g.:
http://www.passportjs.org/docs/authenticate/
Example of use: https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e
add a comment |
up vote
0
down vote
I had exactly the same code and issue whilst trying to introduce express-validator.
I can confirm that adding the additional "(req, res, next);" to the end of the passport.authenticate function does allow the authentication process to complete and /login to process.
However there seems to be no additional user added to the database after passport has authenticated with this method alone. I think a custom callback for passport is required e.g.:
http://www.passportjs.org/docs/authenticate/
Example of use: https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e
add a comment |
up vote
0
down vote
up vote
0
down vote
I had exactly the same code and issue whilst trying to introduce express-validator.
I can confirm that adding the additional "(req, res, next);" to the end of the passport.authenticate function does allow the authentication process to complete and /login to process.
However there seems to be no additional user added to the database after passport has authenticated with this method alone. I think a custom callback for passport is required e.g.:
http://www.passportjs.org/docs/authenticate/
Example of use: https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e
I had exactly the same code and issue whilst trying to introduce express-validator.
I can confirm that adding the additional "(req, res, next);" to the end of the passport.authenticate function does allow the authentication process to complete and /login to process.
However there seems to be no additional user added to the database after passport has authenticated with this method alone. I think a custom callback for passport is required e.g.:
http://www.passportjs.org/docs/authenticate/
Example of use: https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e
edited Nov 12 at 19:17
answered Nov 12 at 17:48
SamG
12
12
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254274%2fpassport-authenticate-is-stuck-and-does-not-return-any-value%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown