Аутентифицировать Graphcool-Йога с Паспортом
Я работаю над проектом с использованием Graphcool-Yoga с призменными привязками. Хотите настроить аутентификацию, используя стратегии Passport Local, Bearer, Github и Twitter. Вот как выглядит мой запрос graphql
user: (root, args, context, info) => {
const { id } = args;
if(!passport.authenticate('bearer')(context)){
throw new Error('Not Authorised');
}
if (!id) {
throw new Error('Id cannot be empty');
}
return context.db.query.user(
{
where: {
id: id,
active: true,
},
},
info,
);}
Мой auth.js, где я реализовал свою стратегию паспорта для токена на предъявителя:
import express from 'express';
import passport from 'passport';
import { Strategy as BearerStrategy } from 'passport-http-bearer';
import jwt from 'jsonwebtoken';
passport.use(new BearerStrategy((token, done) => {
jwt.verify(token, process.env.JWT_SECRET, function(err, decoded) {
if (err) return done(null, err);
if (decoded.sub) {
done(null, decoded.sub || undefined);
}
});
}));
const middleware = express();
middleware.use(passport.initialize());
middleware.use(passport.session());
module.exports = {
authMiddleware: middleware
};
и, наконец, я использовал его в качестве промежуточного программного обеспечения:
const server = new GraphQLServer({
typeDefs: 'app/schema.graphql', // application api schema
resolvers,
context: req => ({
...req,
db
}),
});
server.express.use(authMiddleware);
Это то, что я мог написать после прочтения различных источников, но не работает. Есть ли правильный и лучший способ сделать это?