簡體   English   中英

來自Passport JS的req.user數據未傳遞到Angular Controller

[英]req.user data from Passport JS not passed to Angular Controller

我正在構建一個具有Express / Node后端和Angular JS前端的應用程序。 Kinda是使用此堆棧的新手,我很難在Angular Service + Controller中接收數據

后端:用戶可以使用將用戶對象附加到每個請求的Passport JS向Facebook進行身份驗證。 我打開了一個檢查req.user是否存在的端點,如下所示:

app.get('/checklogin', function(req,res,next){

if(req.user){

  console.log("we found a user!!!");

  console.log("name:" + req.user.displayName);
  console.log("user id" + req.user.id);

  return res.status(201).json(req.user);

} else {

  console.log("there is no user logged in");


} 

});

如果req.user存在,那么用戶已通過身份驗證,它將發送JSON響應。

我想做的是在Angular中將http.get發送到此/ checklogin端點並處理響應。 如果用戶通過身份驗證(req.user是否存在),我想綁定到作用域,如果綁定,則還要綁定displayName和ID,並隱藏show nav鏈接和頁面。

但是我在Angular中的設置會到達API端點,但似乎沒有收到任何數據?

.service("Login", function($http){

    this.isLoggedIn = function(){  

        return $http.get("/checklogin")

            .then(function(response){

             console.log(response)

                return response;

            }, function(response){

                console.log("failed to check login");

            });

    };


})
.controller("mainController", function($scope, Login){


    Login.isLoggedIn()

        .then(function(doc){

            console.log(doc);
            console.log(doc.data);

        }, function(response){

            alert(response);

        });

})

console.log(doc)和console.log(doc.data)沒有記錄任何內容……我在這里做錯了什么????

更多信息:mainController已加載到index.html文件中:

<html lang="en" ng-app="myApp" ng-controller="mainController">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!--load jQuery-->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    <!--load Bootstrap JS-->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <!--load Angular JS-->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-route.js"></script> 
    <!--latest compiled and minified Bootstap CSS-->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <!--link custom CSS file-->
    <link rel="stylesheet" type="text/css" href="/css/style.css">
    <script src="/js/app.js"></script>
</head>

<body>
<!-- NAVBAR ================== ---->        
<nav class="navbar navbar-default navbar-fixed-top">
    <div class="container-fluid">
        <div class="nav-header">
            <a class="navbar-brand" href="#/">Votely</a>
        </div>
        <div class="collapse navbar-collapse" id="myNavbar">
            <ul class="nav navbar-nav navbar-right">
                <li class="active"><a href="#/">Home</a></li>
                <li><a href="/auth/facebook" target="_top">Sign in with Facebook</a></li>
                <li><a href="/logout">Sign Out</a></li>
            </ul>
        </div>
    </div>
</nav>    

<!-- Dynamically render templates Angular JS -->
<div class="container" ng-view>

</div>


</body>

任何幫助,不勝感激,謝謝!

你應該,如果你使用的是從返回服務承諾then控制器即內

.service("Login", function($http){

    this.isLoggedIn = function(){  

        return $http.get("/checklogin");
    };

.isLoggedIn函數應如下所示:

this.isLoggedIn = function(){
    return $http.get("/checklogin");
}

謝謝,我現在開始工作了。 我在Cloud 9 IDE中使用瀏覽器,並且服務器正在發送503響應,不確定原因。 在我設置服務以返回承諾后,它現在可以在Chrome和Firefox等環境中使用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM