Tôi đang làm việc trên REST
api sử dụng NodeJS
. Để xác thực, tôi quyết định sử dụng Passport
. Tôi muốn api thực sự yên tĩnh. Vì vậy, nó có nghĩa là tôi phải sử dụng thẻ thay vì phiên.Xác thực NodeJS REST sử dụng mạng xã hội Hộ chiếu và OAuth2 +
Tôi muốn cho phép người dùng đăng nhập bằng tên người dùng và mật khẩu hoặc sử dụng các mạng xã hội như Facebook, Google và Twitter.
Tôi tạo máy chủ OAuth2.0
của riêng mình để phát hành Access
và Refresh tokens
sử dụng mô-đun oauth2orize
. Vì vậy, bây giờ tôi có thể đăng ký người dùng mới và sau đó phát hành chúng. Tôi đi theo hướng dẫn này:
http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/
Thẩm định sử dụng cho tuyến đường:
// 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 })
}
);
làm việc Tất cả điều này khá tốt. Rất tiếc, tôi không biết cách triển khai xác thực xã hội.
Tôi đã đọc hướng dẫn này:
http://scotch.io/tutorials/javascript/easy-node-authentication-facebook
Nhưng trong hướng dẫn này chúng không được thực hiện một api thực sự yên tĩnh. Tôi đã triển khai lược đồ người dùng theo hướng dẫn này, nơi các mã thông báo cho người dùng cục bộ được lưu trữ trong các mô hình riêng biệt.
// 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
}
});
Nhưng bây giờ, làm cách nào để xác minh người dùng?
passport.authenticate('bearer', { session: false }),
điều này chỉ xác minh mã xác nhận đối với db của tôi, nhưng làm cách nào để xác minh mã thông báo xã hội? Tui bỏ lỡ điều gì vậy?
bạn có thể giải thích cách cuối cùng bạn giải quyết vấn đề này không? Bạn cũng có thể để lại quyền xử lý Twitter của bạn ở phía sau để trao đổi thêm. Cảm ơn :) –
và thay vì hướng dẫn aleksandrov, tại sao không thể sử dụng hộ chiếu-oauth? http://passportjs.org/guide/oauth/ –
Ngoài ra tại sao triển khai oAuth cho máy chủ của riêng bạn? tại sao không sử dụng hộ chiếu địa phương và sau đó phát hành thẻ bằng chiến lược mang? –