Vla*_*nov 5 javascript node.js passport-facebook graphql apollo-server
我有一个客户端服务器和一个API,都使用Apollo。当用户使用Facebook登录时,我想将令牌发送到客户端服务器,然后将其附加到对API进行的每个请求的标头中。不使用会话。
API的外观如下,当用户使用Facebook登录时,此API会成功生成令牌(我也在后台检查数据库中的用户)。
// API running on port 3010
app.use(expressJwt({
secret: authConfig.jwt.secret,
credentialsRequired: false,
getToken: req => req.cookies.id_token,
}));
app.use(passport.initialize());
app.get('/login/facebook',
passport.authenticate('facebook', { scope: ['email'], session: false }),
);
app.get('/login/facebook/return',
passport.authenticate('facebook', { failureRedirect: 'http://localhost:3000/login', session: false }),
(req, res) => {
const expiresIn = 60 * 60 * 24 * 1; // 1 day
const token = jwt.sign(req.user, authConfig.jwt.secret, { expiresIn });
res.redirect(`http://localhost:3000?token=${token}`); // Redirect to client and append token to param
},
);
Run Code Online (Sandbox Code Playgroud)
我的问题是,现在如何安全地将此令牌交给客户端?我已经读过这个和this,这使我不得不在参数中传递令牌,但是我不确定我在做什么是否安全。
这是我在客户端获得它的方式:
const token = getURLParameterByName('token');
if (token) {
localStorage.setItem('token', token);
}
networkInterface.use([{
applyMiddleware(req, next) {
if (!req.options.headers) {
req.options.headers = {}; // Create the header object if needed.
}
// Get the authentication token from local storage if it exists
const localToken = localStorage.getItem('token')
req.options.headers.authorization = localToken ? `Bearer ${localToken}` : null;
next();
},
}]);
Run Code Online (Sandbox Code Playgroud)
之后,在API中使用它:
app.use('/graphql', apolloExpress(req => {
let token;
if (req.headers.authorization) {
token = req.headers.authorization;
console.log(token);
}
return {
schema: executableSchema,
context: {
token,
},
};
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1016 次 |
最近记录: |