我在尝试使用 Gmail 进行身份验证后收到"ERROR GET /auth/google/callback TokenError: Unauthorized"



我试图使用谷歌身份验证登录,但由于某种原因,在我点击一个帐户后,我一直收到一个错误"错误获取/auth/google/recallback令牌错误:未经授权;在我尝试使用Google Oauth进行身份验证后,如何解决此问题?

这是我的App.js


const GoogleStrategy = require("passport-google-oauth20").Strategy;
const User = require('./models/user.js')

mongoose
.connect('mongodb://localhost/localpassport', { useNewUrlParser: true })
.then(x => {
console.log(`Connected to Mongo! Database name: "${x.connections[0].name}"`)
})
.catch(err => {
console.error('Error connecting to mongo', err)
});
const app_name = require('./package.json').name;
const debug = require('debug')(`${app_name}:${path.basename(__filename).split('.')[0]}`);
const app = express();
// Middleware Setup
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(flash());
app.use(
session({
secret: "our-passport-local-strategy-app",
store: new MongoStore({ mongooseConnection: '//localhost/localpassport' }),
resave: true,
saveUninitialized: true
})
);

app.use(passport.initialize());
app.use(passport.session());

//deserializer code
passport.serializeUser((user, cb) => {
cb(null, user._id);
});
passport.deserializeUser((id, cb) => {
User.findById(id)
.then(user => cb(null, user))
.catch(err => cb(err))
;
});
//Strategy definition
passport.use(new LocalStrategy(
{
usernameField: 'username', // by default
passwordField: 'password'  // by default
},
(username, password, done) => {
User.findOne({ username })
.then(user => {
if (!user) {
return done(null, false, { message: "Incorrect username" });
}
if (!bcrypt.compareSync(password, user.password)) {
return done(null, false, { message: "Incorrect password" });
}
done(null, user);
})
.catch(err => done(err))
;
}
));

//GOOGLE strategy
passport.use(
new GoogleStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_ID,
callbackURL: "http://localhost:3000/auth/google/callback"
},
(accessToken, refreshToken, profile, done) => {
// to see the structure of the data in received response:
console.log("Google account details:", profile);
User.findOne({ googleID: profile.id })
.then(user => {
if (user) {
done(null, user);
return;
}
User.create({ googleID: profile.id })
.then(newUser => {
done(null, newUser);
})
.catch(err => done(err)); // closes User.create()
})
.catch(err => done(err)); // closes User.findOne()
}
)
);
// Express View engine setup
app.use(require('node-sass-middleware')({
src: path.join(__dirname, 'public'),
dest: path.join(__dirname, 'public'),
sourceMap: true
}));

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(express.static(path.join(__dirname, 'public')));
app.use(favicon(path.join(__dirname, 'public', 'images', 'favicon.ico')));

// default value for title local
app.locals.title = 'Express - Generated with IronGenerator';

const auth = require('./routes/auth-routes')
const index = require('./routes/index');
app.use('/', index);
app.use('/', auth)

module.exports = app;

有人能帮我吗?我不知道我做错了什么。

这通常意味着客户端ID或客户端机密中存在拼写错误,您能验证这两个值是否都正确写入了所提供的值吗?

在定义GoogleStrategy时,app.js中存在TYPO,clientSecret定义错误。已解决

最新更新