udało się przezwyciężyć ten z pewnymi spostrzeżeniami: Sesja
1. Wyłącz w ekspresowym - wystarczy wyjąć middleware sesji
// app.use(session({secret: config.secret}))
2. przy użyciu uwierzytelniania Google, co faktycznie się dzieje, że tam jest przekierowanie na stronę logowania do google i jeśli logowanie się powiedzie, przekieruje Cię z powrotem pod podany adres URL.
To właściwie oznacza, że gdy google zadzwoni do twojego callbacka, nie możesz zrobić res.send (tokena, użytkownika) - po prostu nie działa (każdy może wyjaśnić dlaczego?). Więc jesteś zmuszony wykonać przekierowanie do klienta, wykonując res.redirect("/")
. Jednak celem jest przekazanie tokena, aby można było wykonać także 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);
});
Ale w jaki sposób klient uzyska jednostkę użytkownika? Możesz więc przekazać użytkownika w ten sam sposób, ale nie było to dla mnie odpowiednie (przekazanie całej jednostki użytkownika na liście parametrów ...). Zrobiłem więc, aby klient użył tokena i odzyskał użytkownika.
function handleNewToken(token) {
if (!token)
return;
localStorageService.set('token', token);
// Fetch activeUser
$http.get("/api/authenticate/" + token)
.then(function (result) {
setActiveUser(result.data);
});
}
Co oznacza kolejną prośbę o http - To sprawia, że myślę, że być może nie udało mi się zdobyć idei tokena. Zapraszam do oświecenia mnie.
Sprawdź to - wyjaśnia dość wyraźnie. https://cloud.google.com/nodejs/getting-started/authenticate-users –
@MuliYulzary Dzięki, ale w podanym przykładzie jest nadmierne korzystanie z sesji, której staram się unikać. – chenop