Quản lý để khắc phục điều này với một số hiểu biết:
1. disable phiên nhanh - chỉ cần loại bỏ các middleware phiên
// app.use(session({secret: config.secret}))
2. khi sử dụng xác thực của Google những gì thực sự xảy ra là có một chuyển hướng đến trang đăng nhập google và nếu đăng nhập thành công, nó sẽ chuyển hướng bạn trở lại với url bạn đã cung cấp. Điều này thực sự có nghĩa là một khi google gọi lại gọi lại của bạn, bạn không thể thực hiện res.send (token, user) - nó đơn giản là không hoạt động (bất cứ ai cũng có thể giải thích tại sao?). Vì vậy, bạn buộc phải thực hiện chuyển hướng cho khách hàng bằng cách thực hiện res.redirect("/")
. Nhưng toàn bộ mục đích là chuyển mã thông báo để bạn cũng có thể thực hiện res.redirect("/?token=" + token)
.
app.get('/auth/google/callback',
passport.authenticate('google', {
//successRedirect: '/',
failureRedirect: '/'
, session: false
}),
function(req, res) {
var token = AuthService.encode(req.user);
res.redirect("/home?token=" + token);
});
Nhưng cách khách hàng sẽ nhận được thực thể người dùng? Vì vậy, bạn cũng có thể chuyển người dùng theo cùng một cách nhưng nó không cảm thấy phù hợp với tôi (chuyển toàn bộ thực thể người dùng trong danh sách tham số ...). Vì vậy, những gì tôi đã làm là làm cho khách hàng sử dụng mã thông báo và truy xuất người dùng.
Có nghĩa là một yêu cầu http khác - Điều này khiến tôi nghĩ rằng có lẽ tôi không hiểu đúng khái niệm mã thông báo. Hãy soi sáng tôi.
Kiểm tra điều này - Giải thích khá rõ ràng. https://cloud.google.com/nodejs/getting-started/authenticate-users –
@MuliYulzary Cảm ơn bạn, nhưng trong ví dụ bạn đã cho phép sử dụng quá nhiều phiên mà tôi cố gắng tránh. – chenop