【问题标题】:isAuthenticated() function not working node.js passportisAuthenticated() 函数不起作用 node.js 护照
【发布时间】:2017-01-24 00:37:41
【问题描述】:

我正在创建在线课程应用程序,我希望只有经过身份验证的用户才能看到课程详细信息和课程讲座。我正在使用本地护照身份验证策略进行用户身份验证。我在我的路线中添加了 isAuthenticated,但是,未经身份验证的用户仍然可以观看视频讲座。 这是我的路线文件。文件名:-courses.server.routes.js

'use strict';

/**
* Module dependencies
*/
var coursesPolicy = require('../policies/courses.server.policy'),
courses = require('../controllers/courses.server.controller');
var passport = require('passport');

 var isAuthenticated = function(req, res, next) {
 // if user is authenticated in the session, call the next() to call the next request handler
 // Passport adds this method to request object. A middleware is allowed to add properties to
 // request and response objects
 if (req.isAuthenticated())
     return next();
 // if the user is not authenticated then redirect the user to the login page
 res.redirect('/');
};

module.exports = function (app) {
// Courses collection routes
app.route('/api/courses').all(coursesPolicy.isAllowed)
.get(courses.list)
.post(courses.create);

// Single course routes
app.route('/api/courses/:courseId', isAuthenticated).all(coursesPolicy.isAllowed)
.get(courses.read)
.put(courses.update)
.delete(courses.delete);

// Finish by binding the course middleware
app.param('courseId', courses.courseByID);
};

这是我的路由控制器文件。文件名:-courses.server.controller.js

'use strict';

/**
* Module dependencies
*/
var path = require('path'),
mongoose = require('mongoose'),
Course = mongoose.model('Course'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller'));
var passport = require('passport');

/**
* Create an course
*/
exports.create = function (req, res) {
var course = new Course(req.body);
course.user = req.user;

course.save(function (err) {
if (err) {
  return res.status(422).send({
    message: errorHandler.getErrorMessage(err)
  });
} else {
  res.json(course);
}
});
};

/**
* Show the current course
*/
exports.read = function (req, res) {
// convert mongoose document to JSON
var course = req.course ? req.course.toJSON() : {};

// Add a custom field to the Course, for determining if the current User is the "owner".
// NOTE: This field is NOT persisted to the database, since it doesn't exist in the Course model.
course.isCurrentUserOwner = !!(req.user && course.user && course.user._id.toString() === req.user._id.toString());

console.log('course value is: ' + course);
console.log('video lecture embed value is: ' + course.courseLecture.lecture_video);

res.json(course);
};

/**
* Update an course
*/
exports.update = function (req, res) {
var course = req.course;

course.title = req.body.title;
course.content = req.body.content;
course.courseLecture.lecture_video =  req.body.courseLecture.lecture_video;
console.log('course lecture video url is: ' + req.body.courseLecture.lecture_video);
course.save(function (err) {
if (err) {
  return res.status(422).send({
    message: errorHandler.getErrorMessage(err)
  });
} else {
  res.json(course);
}
});
};

/**
* Delete an course
*/
exports.delete = function (req, res) {
var course = req.course;

course.remove(function (err) {
if (err) {
  return res.status(422).send({
    message: errorHandler.getErrorMessage(err)
  });
} else {
  res.json(course);
}
});
};

/**
* List of Courses
*/
exports.list = function (req, res) {
Course.find().sort('-created').populate('user',  'displayName').exec(function (err, courses) {
if (err) {
  return res.status(422).send({
    message: errorHandler.getErrorMessage(err)
  });
} else {
  res.json(courses);
}
});
};

/**
* Course middleware
*/
exports.courseByID = function (req, res, next, id) {

if (!mongoose.Types.ObjectId.isValid(id)) {
return res.status(400).send({
  message: 'Course is invalid'
});
}

Course.findById(id).populate('user', 'displayName').exec(function (err, course) {
if (err) {
  return next(err);
} else if (!course) {
  return res.status(404).send({
    message: 'No course with that identifier has been found'
  });
}
req.course = course;
next();
});
};

我无法弄清楚,这里出了什么问题。

【问题讨论】:

    标签: javascript node.js express passport.js passport-local


    【解决方案1】:

    http调用isAuthenticated函数,动词表示从get, post, patch, delete

    喜欢:

    app.route('/api/courses/:courseId')
     .get(isAuthenticated, courses.read)
    

    还可以将isAuthenticated 写入另一个文件并从您的路线中使用它

    Can see this example

    【讨论】:

    • 这很有意义。是的,它奏效了。我只是没有意识到。非常感谢您在这里的帮助。 @shaishab-roy
    猜你喜欢
    • 2020-10-25
    • 2018-12-07
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多