Я работаю над REST
api, используя NodeJS
. Для аутентификации я решил использовать Passport
. Я хочу по-настоящему RESTful api. Поэтому это означает, что я должен использовать токены вместо сеансов.Аутентификация NodeJS REST с использованием паспорта и социальной сети OAuth2 +
Я хочу, чтобы пользователи входили в систему, используя имя пользователя и пароль, или используя социальные сети, такие как Facebook, Google и Twitter.
Я делаю свой собственный OAuth2.0
сервер для выдачи Access
и Refresh tokens
с использованием oauth2orize
модуля. Итак, теперь я могу зарегистрировать нового пользователя, а затем выпустить их токены. Я после этого учебника:
http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/
Проверка пользователя для маршрута:
// api ------------------------------------------------------------------------------------
app.get('/api/userInfo',
passport.authenticate('bearer', { session: false }),
function(req, res) {
// req.authInfo is set using the `info` argument supplied by
// `BearerStrategy`. It is typically used to indicate scope of the token,
// and used in access control checks. For illustrative purposes, this
// example simply returns the scope in the response.
res.json({ user_id: req.user.userId, name: req.user.username, scope: req.authInfo.scope })
}
);
Все это работает очень хорошо. К сожалению, я не знаю, как реализовать социальную аутентификацию.
Я читал этот учебник:
http://scotch.io/tutorials/javascript/easy-node-authentication-facebook
Но в этом руководстве они не делают действительно RESTful API. Я уже реализовал схему пользователя в соответствии с этим руководством, где токены для локального пользователя хранятся в отдельных моделях.
// define the schema for our user model
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
},
facebook: {
id: String,
token: String,
email: String,
name: String
},
twitter: {
id: String,
token: String,
displayName: String,
username: String
},
google: {
id: String,
token: String,
email: String,
name: String
}
});
Но теперь, как я могу подтвердить пользователя?
passport.authenticate('bearer', { session: false }),
это проверяет только однонаправленного маркер против моей БД, но как я могу проверить социальные маркеры? Я что-то упускаю?
Вы можете уточнить, как вы в конечном итоге решить это? Можете ли вы оставить свой твиттер за дальнейшей перепиской. Спасибо :) –
, а вместо учебника александров, почему нельзя использовать паспорт? http://passportjs.org/guide/oauth/ –
Также зачем реализовать oAuth для своего собственного сервера? почему бы не использовать паспорт-локальный, а затем выдавать токены по стратегии-носителям? –