2017-05-16 8 views
-2

エラーをローカルから取得するにはどうすればよいですか?私はそれらをキャッチする方法を見つけることができません。パスポートがエラーのコールバックをres.jsonに送信できるようにするには

already taken???????????????????? 

のNode.js

router.post('/register', passport.authenticate('local-signup'),function(req, res, next) { 
    console.log("registration"); 
    console.log("ERROR?"); 
    console.log(req); 
    console.log(res); 
    // res.json({type: 'danger',message: info}); 


}); 

パスポート:

アイデアは、その後、エラーをキャッチ

res.json 

電流出力でクライアントにメッセージとしてそれらを送信することです:

passport.use('local-signup', new LocalStrategy({ 
      usernameField : 'username', 
      passwordField : 'password', 
      passReqToCallback : true 
     }, 
     function(req, username, password, done) { 
      process.nextTick(function() { 
       console.log("doing local signup"); 
       Account.findOne({username : username }, function(err, user) { 
        if (err) 
         return done(err); 

        if (user) { 
         console.log("already taken????????????????????"); 
         return done(null, false, { message: 'That username is already taken.'}); 
         return done(err); 

        } else { 

         var newUser   = new Account(); 
         newUser.username = username; 
         newUser.password = newUser.encryptPassword(password); 
         // save the user 
         newUser.save(function(err) { 
          if (err) 
           throw err; 
          return done(null, newUser); 
         }); 
        } 

       }); 

      }); 

     })); 

更新:

私は、カスタムエラーコールバックのコードを試してみましたが、その後、私はクライアントにリクエストを送信するためにreqプロパティを取得傾けます。

また、認証ミドルウェアを関数req, res, next,内で呼び出すように移動しようとしましたが、それはまったく呼び出されません。

答えて

0

アプリにジェネリックエラーハンドラがありますか?そうした場合は、failWithErrorというオプションをLocalStrategyに渡すことができます。

例:

passport.authenticate('local-signup', { failWithError: true }) 

パスポートコード切り取ら:エラーが発生した場合

... 
    if (options.failWithError) { 
      return next(new AuthenticationError(http.STATUS_CODES[res.statusCode], rstatus)); 
      } 
... 

そして場合、パスポートは、エラーハンドラのエラーを通過します。

エラーハンドラの例:

... 
// it has to be the last operation in the app object 
app.use(errorHandler); 

function errorHandler(err, req, res, next) { 
    if(typeof error == AuthenticationError) { 
    res.status(403); 
    res.json('error', { error: err }); 
    } 
    else{ /* anything else */} 
} 

は、それはあなたを助ける願っています。

関連する問題