как реализовать авторизацию входа в узел.js



у меня есть этот сервер узла работает:



var server=http.createServer(function(request, responsehttp) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
var POST = qs.parse(body);
processquery(POST, request, responsehttp);
});
} else {
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
console.log(query);
processquery(query, request, responsehttp);
}
});


Я хочу добавить форму входа для этого сервера. поэтому, когда пользователь аутентифицируется, он будет отображаться .



   function processquery(query, request, responsehttp){
var returnResult = function (data){
responsehttp.end(JSON.stringify(data));
};

if (!query.command) {
fileprocess(request, responsehttp);
}
responsehttp.writeHead(200, {"Content-Type": "application/json"});
switch(query.command) {
case 'logout':
logout(query, returnResult);
break;
case 'login':
login(query, returnResult);
break;
}
}


в функции запроса процесса, возвращающей файлы клиенту, если какая-либо команда не задана ,
таким образом , я могу отправить команду входа с клиента на сервер, но что должен делать сервер, когда он получает команду входа с паролем имени пользователя , как он должен передать запрос на вход и вернуть успех или неудачу входа, для написания этой части, мне нужна помощь .



что я пробовал .



function login(request, callback) {
if(request.username==users[request.username] && request.password==users[request.username].password) {
users[request.username].auth=true;
var data = {result:'success','message':'login successful'};
callback(data);
} else {
var data = {result:'error','message':'login incorrect'};
callback(data);
}
}


пожалуйста, предложите, как я могу добавить сеанс в этом я попытался добавить , запросить переменную в функции входа и попытался установить запрос.переменная сеанса это говорит запрос.сеанс не определен .



пожалуйста, предложите, как я могу написать этот модуль входа, который может поддерживать аутентификацию входа правильно для каждого пользователя .

614   5  

5 ответов:

вот как я это делаю с Экспресс.js:

1) Проверьте, аутентифицирован ли пользователь: у меня есть функция промежуточного программного обеспечения с именем CheckAuth, которую я использую на каждом маршруте, который нуждается в аутентификации пользователя:

function checkAuth(req, res, next) {
  if (!req.session.user_id) {
    res.send('You are not authorized to view this page');
  } else {
    next();
  }
}

Я использую эту функцию в моих маршрутах, как это:

app.get('/my_secret_page', checkAuth, function (req, res) {
  res.send('if you are viewing this page it means you are logged in');
});

2) маршрут входа:

app.post('/login', function (req, res) {
  var post = req.body;
  if (post.user === 'john' && post.password === 'johnspassword') {
    req.session.user_id = johns_user_id_here;
    res.redirect('/my_secret_page');
  } else {
    res.send('Bad user/pass');
  }
});

3) маршрут выхода:

app.get('/logout', function (req, res) {
  delete req.session.user_id;
  res.redirect('/login');
});      

если вы хотите узнать подробнее о Экспресс.js проверьте их сайт здесь:expressjs.com/en/guide/routing.html Если есть необходимость в более сложных вещах, проверьте everyauth (это имеет большое двиг методов, для facebook, Twitter и т. д; хороший учебник по нему здесь).

на самом деле это не совсем ответ на вопрос, но это лучший способ, чтобы сделать это.

Я предлагаю вам использовать подключиться/экспресс как http-сервер, так как они экономят вам много времени. Вы явно не хотите изобретать велосипед. В вашем случае управление сеансами намного проще с connect / express.

кроме того, для аутентификации я предлагаю вам использовать everyauth. Который поддерживает много аутентификации стратегия. Высокий для быстрого развития.

все это может быть легко вниз с некоторой копией вставки из их документации!

чтобы добавить к псевдо-ответу Фарида,

рассмотрите возможность использования паспорт.js over everyauth.

ответы этот вопрос дайте некоторое представление о различиях.


есть много преимуществ для разгрузки аутентификации пользователя в Google, Facebook или другой веб-сайт. Если требования вашего приложения таковы, что вы можете использовать Passport в качестве единственного поставщика аутентификации или вместе с ним традиционный вход, это может сделать опыт проще для ваших пользователей.

@alessioalex ответ является идеальным демо для свежего пользователя узла. Но в любом случае, трудно написать промежуточное программное обеспечение checkAuth во все маршруты, кроме входа в систему, поэтому лучше переместить checkAuth из каждого маршрута в одну запись с приложением.использовать. Например:

function checkAuth(req, res, next) {
  // if logined or it's login request, then go next route
  if (isLogin || (req.path === '/login' && req.method === 'POST')) {
    next()
  } else {
    res.send('Not logged in yet.')
  }
}

app.use('/', checkAuth)

я попробовал этот ответ, и это не сработало для меня. Я также новичок в веб-разработке и брал классы, где я использовал mlab, но я предпочитаю разбор, поэтому мне пришлось искать наиболее подходящее решение. Вот мое собственное текущее решение с помощью parse на expressJS.

1) Проверьте, аутентифицирован ли пользователь: у меня есть функция промежуточного программного обеспечения с именем isLogginIn, которую я использую на каждом маршруте, который нуждается в аутентификации пользователя:

 function isLoggedIn(req, res, next) {
 var currentUser = Parse.User.current();
 if (currentUser) {
     next()
 } else {
     res.send("you are not authorised");
 }
}

Я использую эту функцию в моем маршрутов вот так:

  app.get('/my_secret_page', isLoggedIn, function (req, res) 
  {
    res.send('if you are viewing this page it means you are logged in');
  });

2) Маршрут Входа:

  // handling login logic
  app.post('/login', function(req, res) {
  Parse.User.enableUnsafeCurrentUser();
  Parse.User.logIn(req.body.username, req.body.password).then(function(user) {
    res.redirect('/books');
  }, function(error) {
    res.render('login', { flash: error.message });
  });
});

3) маршрут выхода:

 // logic route
  app.get("/logout", function(req, res){
   Parse.User.logOut().then(() => {
    var currentUser = Parse.User.current();  // this will now be null
    });
        res.redirect('/login');
   });

это сработало очень хорошо для меня, и я сделал полную ссылку на документацию здесь https://docs.parseplatform.org/js/guide/#users

спасибо @alessioalex за его ответ. Я только обновил с последними практиками.

Comments

    Ничего не найдено.