2015-04-01 3 views
1

У меня есть приложение sails.js, которое генерирует API для моего клиента. Чтобы защитить свой API, мне нужно реализовать OAuth2.0 в моем приложении sails. Я начал следовать этому руководству: https://www.npmjs.com/package/sails-generate-auth#requirementsКак реализовать OAuth в моем приложении Nodejs/Sails.js?

Но я получаю всевозможные различные ошибки, когда каждый раз, когда я пытаюсь поднять сервер. Я также не понимаю, куда я могу отправить свои учетные данные на сервер и получить токен доступа. Я довольно новичок в Sails.js и просто узнал OAuth, и я не могу найти правильное руководство по реализации OAuth.

Как я могу реализовать OAuth в своем приложении? пожалуйста, дайте подробный ответ, чтобы я мог полностью понять.

UPDATE:

ИТАК вместо этого я начал следовать этому руководству: https://www.bearfruit.org/2014/07/21/tutorial-easy-authentication-for-sails-js-apps/ , и я думаю, что я получил все, чтобы работать как надо, когда я зарегистрировать учетную запись она сохраняет данные в базе данных (?) как это должно. Как правило, логин работает правильно. Но я не понял, как я могу получить доступ к данным эквалайзера, таким как имя пользователя и адрес электронной почты после того, как логин перенаправит меня на домашнюю страницу? Я протестировал логин на почтальоне, и когда я вхожу в систему, я получаю файл cookie. Что я должен делать с этим?

+1

Посмотрите паспорт.js http://passportjs.org/guide/oauth/ –

+0

1) В каком файле я помещаю код конфигурации? 2) Откуда я могу получить данные паспорта, такие как идентификатор клиента и секретный клиент? –

+1

Sails.js gitter room - отличное место для поддержки: https://gitter.im/balderdashy/sails –

ответ

1

AuthController порождена sails-generate-auth не добавляет пользовательские данные к сессии по умолчанию, так что вы должны добавить его вручную, добавив следующую строку в функцию обратного вызова в AuthController.js

req.session.user = user; 

Это как обратный вызов выглядит с линией:

callback: function (req, res) { 
function tryAgain (err) { 

    // Only certain error messages are returned via req.flash('error', someError) 
    // because we shouldn't expose internal authorization errors to the user. 
    // We do return a generic error and the original request body. 
    var flashError = req.flash('error')[0]; 

    if (err && !flashError) { 
    req.flash('error', 'Error.Passport.Generic'); 
    } else if (flashError) { 
    req.flash('error', flashError); 
    } 
    req.flash('form', req.body); 

    // If an error was thrown, redirect the user to the 
    // login, register or disconnect action initiator view. 
    // These views should take care of rendering the error messages. 
    var action = req.param('action'); 

    switch (action) { 
    case 'register': 
     res.redirect('/register'); 
     break; 
    case 'disconnect': 
     res.redirect('back'); 
     break; 
    default: 
     res.redirect('/login'); 
    } 
} 

passport.callback(req, res, function (err, user, challenges, statuses) { 
    if (err || !user) { 
    return tryAgain(challenges); 
    } 

    req.login(user, function (err) { 
    if (err) { 
     return tryAgain(err); 
    } 

    // Mark the session as authenticated to work with default Sails sessionAuth.js policy 
    req.session.authenticated = true; 

    req.session.user = user; 

    // Upon successful login, send the user to the homepage were req.user 
    // will be available. 
    res.redirect('/'); 
    }); 
}); 

}

Теперь вы можете использовать данные пользователя в любом из вашего Contr ollers и views, ссылаясь на req.session.user, например twitter предоставляет ваше имя пользователя, чтобы вы могли использовать req.session.user.username.

Смежные вопросы