Javascript 在用户通过Facebook身份验证后,您如何证明该用户已通过身份验证?

Javascript 在用户通过Facebook身份验证后,您如何证明该用户已通过身份验证?,javascript,node.js,passport.js,passport-facebook,Javascript,Node.js,Passport.js,Passport Facebook,我正在学习教程,用Node和Passport实现Facebook身份验证 本教程和演示文稿都说明了如何做到这一点: router.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' }) ); 但是,用户如何知道他们是否经过身份验证?我想把数据发送到我的前端,显示用户是否登录,我可以用它来更新,

我正在学习教程,用Node和Passport实现Facebook身份验证

本教程和演示文稿都说明了如何做到这一点:

router.get('/auth/facebook/callback',
  passport.authenticate('facebook', {
    successRedirect: '/',
    failureRedirect: '/login'
  })
);
但是,用户如何知道他们是否经过身份验证?我想把数据发送到我的前端,显示用户是否登录,我可以用它来更新,比如我的导航栏

据我所知,使用Facebook进行身份验证的过程如下:

// Authentication service for user variables
angular.module('users').factory('Authentication', [

    function() {
        var _this = this;

        _this._data = {
            user: window.user
        };

        return _this._data;
    }
]);
  • 发送
    GET/auth/facebook
    请求
  • 点击路线
  • 304重定向
    使用url发回Facebook门户
  • 使用回调url向Facebook门户发送请求
  • 用户在门户上单击“接受”
  • Facebook发回一个
    304重定向
    ,url是你的回调url
  • 请求被发送到您的回调url,在本例中是
    GET/auth/facebook/callback
  • passport.use(obj,cb)
    cb
    运行
  • 返回
    304重定向
    ,url为
    /
    /login
    ,具体取决于成功或失败
  • 请求被发送到
    /
    /login
  • 我不确定如何使用登录用户更新我的前端

    router.get('/auth/facebook/callback',
      passport.authenticate('facebook'),
      function(req, res) {
        var userCopy = JSON.parse(JSON.stringify(req.user));
        delete userCopy.auth;
        res.status(200).json(userCopy);
      }
    );
    
    这不起作用,因为没有接收数据的
    $http.get().then()


    我尝试添加一些查询参数:

    successRedirect: '/?foo=bar'
    
    但这对我不起作用。url栏显示
    http://localhost:3000/?foo=bar#_=_
    这不会记录任何内容:

    app.get('/*', function(req, res) {
      var url = path.resolve(__dirname + '/../client/' + envFolder + '/index.html');
      res.sendFile(url, null, function(err) {
        if (err) {
          return res.status(500).send(err);
        }
        console.log('here');
        console.log(req.query);
        return res.status(200).end();
      });
    });
    
    当我执行
    成功重定向:'/home?facebook=true'
    时,它就会工作。但是在
    sendFile
    中,我无法发送任何其他内容。如果我尝试
    res.send('Authenticated with Facebook')
    它会给我这个错误:
    错误:发送后无法设置头。
    。大概是因为
    sendFile
    正在发回文件并设置一些标题,然后我尝试用不同的标题发回其他内容。所以我不知道该怎么办


    我采用的方法是使用
    run
    块:

    function run($http, Session, $cookies) {
      $http
        .get('/current-user')
        .then(function(response) {
          Session.setUser(response.data);
          $cookies.put('userId', response.data._id);
        })
      ;
    }
    
  • 我不确定这是不是最好的办法
  • 它把我的测试搞得一团糟,因为他们不希望收到HTTP请求,它设置了会话和cookies,而我并不总是想这样做

  • 您可以在视图中渲染用户对象,因此可以通过角度检查变量的存在来获得:

    router.get('/auth/facebook/callback',
      passport.authenticate('facebook'),
      function(req, res) {
        var userCopy = JSON.parse(JSON.stringify(req.user));
        delete userCopy.auth;
        res.status(200).render('index', {user: userCopy});
      }
    );
    
    您的HTML索引文件应具有:

    <!--Embedding The User Object-->
    <script type="text/javascript">
        var user = <%= user | json | safe %>;
    </script>
    
    在主控制器中插入自动授权服务并使用用户对象:

    angular.module('core').controller('MainController', ['$scope', 'Authentication',
        function ($scope, Authentication) {
            $scope.authentication = Authentication;
        }
    ]);