为什么auth.isAuthenticated()在MEAN.JS中不起作用?

时间:2016-10-21 15:54:17

标签: javascript angularjs node.js mean-stack express-jwt

我使用MEAN.JS和jsonwebtoken进行了简单的注册,登录和文章。 在用户输入所有值后的注册页面中,我通过注册api将值传递给服务器。服务器端我正在创建jsonwebtoken并且正在传递给客户端

exports.create = function (req, res, next) {

    var newUser = new User(req.body);
    newUser.provider = 'local';
    newUser.role = 'user';

    newUser.save(function(err, user) {
        if (err) return validationError(res, err);
        var token = jwt.sign({
            _id: user._id
        }, config.secrets.session, {
            expiresInMinutes: 60 * 5
        });
        res.json({
            token: token
        });
    });
};

获得该令牌客户端后,某些人称我为“我”。 api(我不明白我传递的是什么)

客户端注册控制器:

$scope.register = function(form) {
   Auth.createUser({
     username: $scope.user.name,
     useremail: $scope.user.email,
     password: $scope.user.password
   })
};

auth.service:

createUser: function(user, callback) {
    var cb = callback || angular.noop;

    return User.save(user,
      function(data) {
        $cookieStore.put('token', data.token);
        currentUser = User.get();
        return cb(user);
      },
      function(err) {
        this.logout();
        return cb(err);
      }.bind(this)).$promise;
  }

user.service:

.factory('User', function ($resource) {
    return $resource('/api/users/:id/:controller', {
      id: '@_id'
    },
    {
      changePassword: {
        method: 'PUT',
        params: {
          controller:'password'
        }
      },
      get: {
        method: 'GET',
        params: {
          id:'me'
        }
      }
      });
  });

注册后:

get: {
        method: 'GET',
        params: {
          id:'me'
        }
      }

我不明白这一点。在服务器端' me' api看起来像这样 路线:

router.get('/me', auth.isAuthenticated(), controller.me);

控制器:

exports.me = function(req, res, next) {
  var userId = req.user._id;
  User.findOne({
    _id: userId
  }, '-salt -hashedPassword', function(err, user) { 
    if (err) return next(err);
    if (!user) return res.status(401).send('Unauthorized');
    res.json(user);
  });
};

auth.service:

var validateJwt = expressJwt({ secret: config.secrets.session });

/**
* Attaches the user object to the request if authenticated
* Otherwise returns 403
*/

function isAuthenticated() {
  return compose()
    // Validate jwt
    .use(function(req, res, next) {
      // allow access_token to be passed through query parameter as well
      if(req.query && req.query.hasOwnProperty('access_token')) {
        req.headers.authorization = 'Bearer ' + req.query.access_token;
      }
      validateJwt(req, res, next);
    })
    // Attach user to request
    .use(function(req, res, next) {
      User.findById(req.user._id, function (err, user) {
        if (err) return next(err);
        if (!user) return res.status(401).send('Unauthorized');

        req.user = user;
        next();
      });
    }).use(function (err, req, res, next) {
      if (err.name === 'UnauthorizedError') {
        var e = [];
        e.push(err);
        return res.status(401).send(e);
      }
    });
}

我想知道他们在' me' api以及我如何得到&req.user._id'在exports.me函数中。如果我想让我这样做的话。 api(我自己的),我怎么能传递这个令牌呢?

服务器端控制台我得到了这个:GET /api/users/me 200 876ms - 339b

0 个答案:

没有答案