ExpressGraphql JWT 身份验证,不工作
ExpressGraphql JWT authentication, not working
在过去的两周里,我一直在研究这个解决方案,但没有成功。谁能告诉我哪里出错了?对于身份验证,我使用 express-graphql、express-jwt 进行身份验证 [backend-[node, express-graphql, express-jwt, graphql-tools], frontend-[React-hooks,graphql-hooks]]。以下我用于身份验证
const authMiddleware = jwt({
secret: app.get("getsecretval"),
credentialsRequired: false,
getToken: function fromHeaderOrQuerystring(req) {
if (
req.headers.authorization &&
req.headers.authorization.split(" ")[0] === "Bearer"
) {
return req.headers.authorization.split(" ")[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}
});
app.use(authMiddleware);
app.use(
"/graphqlAPIRoute",
bodyParser.json(),
authMiddleware,
ExpressGraphQLHTTP(req => ({
schema: Schema,
rootValue: global,
context: {
user: req.user
}
}))
);
// Schema - 放在 authMiddleware
之上
这甚至在授权 headers 不存在时也有效,即,如果应用程序处于 logged-in 状态,因为令牌存储在本地存储中,而不是传入 headers ] 但服务器代码执行并获取数据。情况一定不是这样,并且必须抛出身份验证错误。如果我添加 jwt 验证我们无法登录,因为没有 headers.
我想 auth 中间件没有工作,我应该在哪里放置 jwt-verify 函数来验证令牌。对于 Jwt 验证令牌,我正在使用
const jwtverify = require('jsonwebtoken');
因为 express-jwt 我发现没有这样的功能
谁能告诉我哪里出错了?任何帮助将不胜感激。
这样不行吗?
index.js - 代码序列很重要
const authMiddleware = jwt({
secret: "place secret here either pass as env",
credentialsRequired: false,
)}
app.use(authMiddleware);
const context = async (req) => {
const { authorization: token } = req.headers;
return { token };
};
app.use(
"/graphqlAPIRoute",
bodyParser.json(),
authMiddleware,
ExpressGraphQLHTTP(req => ({
schema: Schema,
rootValue: global,
}))
context: () => context(req),
);
在过去的两周里,我一直在研究这个解决方案,但没有成功。谁能告诉我哪里出错了?对于身份验证,我使用 express-graphql、express-jwt 进行身份验证 [backend-[node, express-graphql, express-jwt, graphql-tools], frontend-[React-hooks,graphql-hooks]]。以下我用于身份验证
const authMiddleware = jwt({
secret: app.get("getsecretval"),
credentialsRequired: false,
getToken: function fromHeaderOrQuerystring(req) {
if (
req.headers.authorization &&
req.headers.authorization.split(" ")[0] === "Bearer"
) {
return req.headers.authorization.split(" ")[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}
});
app.use(authMiddleware);
app.use(
"/graphqlAPIRoute",
bodyParser.json(),
authMiddleware,
ExpressGraphQLHTTP(req => ({
schema: Schema,
rootValue: global,
context: {
user: req.user
}
}))
);
// Schema - 放在 authMiddleware
之上这甚至在授权 headers 不存在时也有效,即,如果应用程序处于 logged-in 状态,因为令牌存储在本地存储中,而不是传入 headers ] 但服务器代码执行并获取数据。情况一定不是这样,并且必须抛出身份验证错误。如果我添加 jwt 验证我们无法登录,因为没有 headers.
我想 auth 中间件没有工作,我应该在哪里放置 jwt-verify 函数来验证令牌。对于 Jwt 验证令牌,我正在使用
const jwtverify = require('jsonwebtoken');
因为 express-jwt 我发现没有这样的功能
谁能告诉我哪里出错了?任何帮助将不胜感激。
这样不行吗?
index.js - 代码序列很重要
const authMiddleware = jwt({
secret: "place secret here either pass as env",
credentialsRequired: false,
)}
app.use(authMiddleware);
const context = async (req) => {
const { authorization: token } = req.headers;
return { token };
};
app.use(
"/graphqlAPIRoute",
bodyParser.json(),
authMiddleware,
ExpressGraphQLHTTP(req => ({
schema: Schema,
rootValue: global,
}))
context: () => context(req),
);