我有两个文件: googleAuth.ts(辅助文件)
import passport from 'passport';
import {User} from './entity/User';
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const googleOptions = {
clientID: process.env.clientID,
clientSecret: process.env.clientSecret,
callbackURL: 'http://localhost:4000/auth/google/callback'
};
const googleCallback = (_accessToken: any, _refreshToken: any, profile: any, done: any) => {
// User.findOneOrFail({googleId: profile.id})
// .then( user => {
// done(null,user)
// })
// .catch(err => done(err,null))
User.findOne({googleId: profile.id})
.then( user =>{
if(user){
return done(null, user)
}
else return done(null, null)
})
}
export const googleAuth = () => passport.use(new GoogleStrategy(
googleOptions,
googleCallback
));
和index.ts(main):
import "reflect-metadata";
import {createConnection} from "typeorm";
import "dotenv/config"
import express from "express";
import { ApolloServer } from "apollo-server-express";
import { buildSchema } from "type-graphql";
import cors from "cors";
import { PostResolver } from "./resolvers/PostResolver";
import { UserResolver } from "./resolvers/UserResolver";
import path from 'path';
import passport from "passport";
import { googleAuth} from './googleAuth';
(async () => {
await createConnection();
googleAuth();
passport.serializeUser(function(user: any, done: any) {
done(null, user);
});
passport.deserializeUser(function(user: any, done: any) {
done(null, user);
});
const app = express();
app.use(cors());
app.use(passport.initialize());
app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));
app.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: 'http://localhost:4000/success',
failureRedirect: 'http://localhost:4000/fail',
}));
const apolloServer = new ApolloServer({
schema: await buildSchema({
resolvers: [ PostResolver, UserResolver ]
}),
context: ({ req, res }) => ({ req, res })
});
...
const port = process.env.PORT || 4000;
app.listen(port, () => console.log(`Server started on port ${port}`));
})();
我不知道它的外观,但是在auth / google / callback上出现此错误(google error):
Authorization Error
Error 400: invalid_request
Missing required parameter: scope
Learn more
稍后,我需要以某种方式获取登录的数据(我想到了Resolver,它将从上下文中加载数据)。
在我的Google应用程序凭据中,我具有: http:// localhost:4000作为授权的JavaScript来源
以http:// localhost:4000 / auth / google / callback作为授权重定向URI