2017-01-17 7 views
0

私は自分のアプリのFacebookログインに取り掛かりましたが、ここに問題があります。 どうすればよいですか?前の1つが失敗した場合にのみ機能を実行する

1は - Facebookを利用して認証(DONE) 2 - フェイスブックからUSARデータを取得する(DONE) 3 - 彼は、電子メールとfbトークンを使用してログインしますない場合 - ユーザーは が存在するかどうかをチェックします。 - そうしないと、システムはデータを登録して自動的にサインインします。

問題は次のとおりです。 私はここにメソッドがあり、認証し、登録しています。 私は何をしなければなりませんか? コール認証、エラーが発生した場合は、認証と登録を呼び出す必要があります。 どうすればいいですか?

NodeJS

で登録
api.register= function(req, res) { 
    if (req.body.password!==null) { 
      var hash = bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(9)); 
      req.body.password= hash; 
      console.log('Default Login'); 
    } 
    if(req.body.tokenFB!==null){ 
     var tokenHash = bcrypt.hashSync(req.body.tokenFB, bcrypt.genSaltSync(9)); 
     req.body.tokenFB = tokenHash; 
     console.log('Login with facebook'); 
    } 
    userModel.create(req.body) 
     .then(function(user){ 
      res.json(user); 
      console.log('We have a new user! =)'); 
     }, function(error){ 
      res.status(500).json(error); 
     }); 
}; 

私はそれをしようとしていたし、何を私を示すためにcuzをNodeJS

で認証
api.authenticate= function(req, res) { 
     var email = req.body.email; 
     console.log(req.body); 
     userModel.findOne({"email":email}) 
     .then(function(user){ 
      if (user == null) { 
       res.status(404).json(); 
      } 
      else { 
       if (req.body.password!==null && bcrypt.compareSync(req.body.password, user.password)) { 
        //user found 
        console.log('default user') 
        var token = jwt.sign({email:user.email}, app.get('secret'), { 
         expiresIn: 84600 
        }); 

        res.set('x-access-token', token); 
        res.json(user); 
       } else if (req.body.tokenFB!==null && bcrypt.compareSync(req.body.tokenFB, user.tokenFB)){ 
        console.log('facebook user') 
        var token = jwt.sign({email:user.email}, app.get('secret'), { 
         expiresIn: 84600 
        }); 

        res.set('x-access-token', token); 
        res.json(user); 

       } 
       else { 
        res.status(404).json(); 
       } 
      } 
     }, function(error){ 
      res.status(404).json(error); 
     }); 
}; 

AngularJS でFacebookログインIF部分が明確に存在し、機能しません。やろうとしています

$scope.FBLogin = function(){ 
    firebase.auth().signInWithPopup(provider).then(function(result) { 

    var token = result.credential.accessToken; 
    var user = result.user; 

    $http.get('https://graph.facebook.com/v2.5/me? access_token='+token+'&fields=id,name,first_name,last_name,email') 
    .success(function(jsonService){ 
     $scope.user.firstName= jsonService.first_name; 
     $scope.user.lastName = jsonService.last_name 
     $scope.user.email = jsonService.email; 
     $scope.user.password=null; 
     $scope.user.tokenFB=token; 
     $scope.user=true; 
     console.log($scope.user); 

     if($scope.authenticate()){ 
     console.log("Logged in with Facebook! :)") 
     } else { 
     $scope.checkingUser=false; 
     $scope.Register(); 
     $scope.Authenticate(); 
     }; 
    }); 

    }).catch(function(error) { 
    // Handle Errors here. 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    // The email of the user's account used. 
    var email = error.email; 
    // The firebase.auth.AuthCredential type that was used. 
    var credential = error.credential; 
    // ... 
    }); 
}; 

だから誰でも私を助けてくれますか?

+0

$ scope.authenticate()のコードを投稿することもできます –

+0

ありがとうございました@BalaAbhinav、私はすでに私の問題を解決しました。 しかし、コードはとにかく私の答えです! :) –

答えて

0

だから私は約束を使って私の問題を解決しました。 ここで私は何をしました。 AngularJSでAngularJSでNodeJS

登録

api.register = function(req, res) { 
    if (req.body.password!==null) { 
      var hash = bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(9)); 
      req.body.password = hash; 
      console.log('Default Login'); 
    } 
    if (req.body.idFb!==null) { 
      var idFbHash = bcrypt.hashSync(req.body.idFb, bcrypt.genSaltSync(9)); 
      req.body.idFb = idFbHash; 
      console.log('Login with FB'); 
    } 
    userModel.create(req.body) 
     .then(function(user){ 

      console.log('We have a new account!'); 
      return res.json(user); 
     }, function(error){ 
      return res.status(500).json(error); 
     }); 
}; 

認証NodeJSで

api.authenticate = function(req, res) { 
     var email = req.body.email; 
     userModel.findOne({"email":email}) 
     .then(function(user){ 
      console.log(user); 
      if (user == null) { 
       console.log('The user does not exist') 
       return res.status(404).json(); 
      } 
      else { 
       console.log('User found') 
       if (req.body.password!==null && bcrypt.compareSync(req.body.password, user.password)){ 
        //user found 
        console.log('Default user') 
        var token = jwt.sign({email:user.email}, app.get('secret'), { 
         expiresIn: 84600 
        }); 
        res.set('x-access-token', token); 
        return res.json(user); 


       } else if (req.body.tokenFB!==null && bcrypt.compareSync(req.body.idFb, user.idFb)){ 
        console.log('Facebook user') 
        var token = jwt.sign({email:user.email}, app.get('secret'), { 
         expiresIn: 84600 
        }); 

        res.set('x-access-token', token); 
        return res.json(user); 


       } 
       else { 
        return res.status(404).json(); 
       } 
      } 
     }, function(error){ 
      return res.status(404).json(error); 
     }); 
}; 

認証は

const authenticate = function ($scope){ 
return new Promise((resolve, reject) => { 
    if ($scope.user.email == null) { 
    console.log('Email was not received'); 
    var alertPopup = $ionicPopup.alert({ 
     title: 'We could not log you in', 
     template: 'Please, verify your data!' 
    }); 
    $scope.user.password = ""; 

    // "Return" 
    reject(false); 
    } else if($scope.user.tokenFB == null && $scope.user.password == null){ 
    console.log("No password or Facebook token") 
    var alertPopup = $ionicPopup.alert({ 
     title: 'We could not log you in', 
     template: 'Please, verify your data!' 
    }); 

    // "Return" 
    reject(false) 
    } else { 
    $http.post(serveradress.url+'/authenticate/', $scope.user).success(function(user){ 


     $localStorage.user=user; 
     //$scope.isLoggedIn=true; 
     $scope.user = user; 
     $scope.user.password = ""; 
     UserService.setUser(user); 
     window.location = '#/timeline'; 
     $scope.hide(); 
     //teste aidax 
     ax.ready(function() { 
     ax.toggle_debug(); 
     }); 
     ax.goal('login', true, false, { 
     email: user.email 
     }); 
     ax.identify(user.email); 



     resolve(true) 
    }).error(function(erro){ 

     if($scope.checkingUser){ 
     console.log("User does not exist") 
     } else { 
     $scope.hide(); 
     console.log("tá entrando aqui!") 
     var alertPopup = $ionicPopup.alert({ 
      title: 'We could not log you in', 
      template: 'Please, verify your data!' 
     }); 
     console.log(erro); 
     } 

     // "Return" 
     reject(false); 
    }); 
    } 
}) 
}; 

Facebookログイン

$scope.FBLogin = function(){ 
firebase.auth().signInWithPopup(provider).then(function(result) { 
    $scope.user.tokenFB = result.credential.accessToken; 
    $scope.user.password = null; 
    $scope.user.email = result.user.email; 
    $scope.user.idFb = result.user.providerData[0].uid; 
    $scope.checkingUser=true; 



authenticate($scope).then(function(userExists){ 
    console.log("Welcome facebook user!") 
}) 
.catch(function(failure){ 
    console.log("Ops, you don't have an account yet, let me solve this!") 
    RegisterFB($scope).then(function(userRegistered){ 

    $scope.checkingUser=false; 
    console.log("Done, now you have an account!"); 
    authenticate($scope).then(function(userExists){ 
    console.log("Welcome facebook user!") 
}) 
    }) 
    .catch(function(failure){ 
    console.log("Sorry, an error occured") 
    console.log(failure) 

    }) 
}); 
関連する問題