2016-05-27 12 views
2

パスポート認証を使用してログインとサインアップの処理を行うSPAを開発しています。問題はすべて正常に動作することです。成功通知を表示することもできますが、ユーザーが誤った操作をした場合にエラー通知を表示する方法を見つけることができません。ここでMEANスタックを使用したサインアップでのエラーメッセージの表示方法

はパスポートのinitにサインアップのための私のコードです:

passport.use('signup', new LocalStrategy({ 
    passReqToCallback : true 
}, 
function(req, username, password, done){ 
    var email = req.body.email; 
    User.findOne({$or: 
    [ 
     {username: username}, 
     {email: email} 
    ] 
    }, function(err, user){ 
     if(err){ 
      return done(err, false); 
     } 

    if(user) { 
      console.log('username or email already taken '+req.body.username); 
      return done(null, false, {message: 'Username or email already taken.'}); 
     } 

     user = new User(); 

     if(req.body.password===req.body.username || req.body.password===req.body.fullname 
      || req.body.password===req.body.email){ 
     console.log('The password can not be equals to your fullname'+ 
      ', username or email. Try another password.'); 
      return done(null, false, {message: 'The password can not be equals to your fullname'+ 
      ', username or email. Try another password.'}); 
     } 

次に、この例以外に方法はユーザーデータとエラーを返しません発生した場合。ここで

は角に結果を渡すための経路コードです:

router.get('/failure', function(req, res){ 
    res.send({state: 'failure', user: null, message: "Invalid username or password"}); 
}); 

router.post('/signup', passport.authenticate('signup',{ 
    successRedirect: '/auth/success', 
    failureRedirect: '/auth/failure', 
    failureFlash: true 
})); 

そして最後に、私は、応答を呼び出して取得するために、この角度を得た:

$scope.register = function(){ 
    $http.post('/auth/signup', $scope.user).then(

    function(data){ 
     $rootScope.authenticated = true; 
     $rootScope.current_user = data.user.username; 
     $rootScope.signUp = true; 
    }, 

     function(data, status){ 
     console.log(status); 
     } 
    ); 
}; 

これはそれです。角度コードはコントローラの中にあります。私はちょうどMEANスタックアプリケーションを構築することを学び始めたので、どんな助けもありがたいです。

答えて

2

あなたはクライアントにエラーを送信する必要がありますカスタムエラー/カスタム・ロジックがある場合:

if(user) 
return done({error:'userAlreadyTaken'},false); 

あなたのコードを持っている他の条件についても同様。

+0

しかし、どうすればそのエラーメッセージをAngularに戻すことができますか?私はパスポートの失敗の場合は、 'register()'関数でそれを取得する方法を意味します... –

+0

にお返事ありがとうございます。約束が満たされた後に何を得るかを確認してください。 (JSON.stringify(data))またはコンソールログ –

+0

あなたが言ったことは、古いコードの代わりにdone関数で書いたことです。しかし、私はこれを持っています: 'POST/auth/signup 500 348.252 ms - 32'。 –

関連する問題