作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我正在通过 Google 构建登录功能,但我遇到了一些让我感到困惑的问题。
我们可以在一个项目中同时使用 Restful API 和 Graphql API 吗?除了谷歌身份验证,我们需要一些路由来处理它。对于 CRUD 操作,我们使用 Graphql。
像这样的东西:
const { GraphQLServer } = require('graphql-yoga');
const { Prisma } = require('prisma-binding');
const resolvers = require('./resolvers');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
// mongoose.
User.findById(id).then(user => {
done(null, user);
});
});
passport.use(new GoogleStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: '/auth/google/callback',
},
(accessToken, refreshToken, profile, done) => {
console.log(profile);
// After receive profile info from google, call mutation and save
// profile into database.
}
));
const db = new Prisma({
typeDefs: 'src/generated/prisma.graphql',
endpoint: process.env.PRISMA_ENDPOINT,
debug: true,
secret: process.env.PRISMA_SECRET,
});
const server = new GraphQLServer({
typeDefs: './src/schema.graphql',
resolvers,
resolverValidationOptions: {
requireResolversForResolveType: false
},
context: req => ({ ...req, db })
});
server.express.get('/auth/connect', passport.authenticate('google', {
scope: ['profile', 'email']
}));
server.express.get('/auth/google/callback', passport.authenticate('google'));
server.start(() => console.log(`Server is running on ${process.env.PRISMA_ENDPOINT}`));
GoogleStrategy
的回调函数中,如何调用 Mutation 并将所有个人资料信息从 Google 保存到数据库?
(accessToken, refreshToken, profile, done) => {
console.log(profile);
// After receiving profile info from google, call mutation and save
// profile into the database.
}
deserializeUser
和
serializeUser
功能。之前,当我使用 Nodejs 和 MongoDB 时,我已经这样做了:
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
// mongoose.
User.findById(id).then(user => {
done(null, user);
});
});
最佳答案
在您的服务器中,您创建 prisma-binding
实例,然后您将其传递给 graphql-yoga
的上下文.这允许您在解析器中进行棱镜操作,如下所示:
context.db.query.user({where: {id: 'ABCD'}})
prisma-binding
其他地方的实例!
prisma-binding
实例并调用查询和突变:
db.mutation.createUser({data: {name: 'John Doe'}})
关于passport.js - 带有 Passport 、graphql-yoga 和prisma 的GoogleOAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52716826/
我看到有几篇关于“无法设置属性”的帖子,但我仍在努力找出我在这里缺少的内容。我是 Javascript 和 GAS 的新手。我写过一本关于 GAS 的书,名为《GScript 企业应用程序要点》。该代
我使用 dektrium/yii2-user(在一个项目上)和 yiisoft/yii2-authclient(在另一个项目上)通过 Google 帐户登录。前段时间一切正常,但我想在上次 Compo
我是一名优秀的程序员,十分优秀!