Google OAuth2无法在移动设备上运行

Toko Goshadze

所以最近我遇到了一个问题,当我尝试通过移动设备使用google oauth2进行身份验证时会发生这种情况,但是当我尝试通过计算机进行身份验证时,它可以正常工作。我在node / express项目中将它与passwordjs一起使用。

项目链接:https : //rhubarb-tart-18821.herokuapp.com/

你们可以在这里查看代码:https//ide.c9.io/saijax/www

只是整个认证是如此之大,以至于我无法将所有内容都放在这里...

编辑:

这是一些主要文件

护照

const GoogleStrategy = require("passport-google-oauth2")
.Strategy;
const mongoose = require("mongoose");
const keys = require("./keys");
module.exports = (passport) => {
passport.use(
    new GoogleStrategy({
          clientID: keys.googleClientID,
          clientSecret: keys.googleClientSecret,
          callbackURL: "/auth/google/callback",
          proxy: true 
    }, (accessToken, refreshToken, profile, done) => {
    const image = profile.photos[0].value.substring(0, profile.photos[0].value.indexOf("?"));

    const newUser = {
        googleID: profile.id,
        email: profile.emails[0].value,
        firstName: profile.name.givenName,
        lastName: profile.name.familyName,
        image: image
    }
    // CHECK FOR USER
    User.findOne({
        googleID: profile.id
    }).then(user => {
        if(user){
            done(null, user);
        } else {
        // CREATE USER
            new User(newUser)
                .save()
                .then(user => done(null,user));
        }
    })
    })
);

passport.serializeUser((user, done) => {
    done(null, user.id);
});
passport.deserializeUser((id, done) => {
    User.findById(id)
        .then(user => done(null, user));
});

}

auth.js

const express = require("express");
const passport = require("passport");
const router = express.Router();
router.get("/google", passport.authenticate("google", {
    scope: [
    "profile", 
    "email"
    ]
}));
router.get("/google/callback", passport.authenticate("google", {
    failureRedirect: "/"
}), (req, res) => {
    req.flash("success_msg", "Successfully Logged In");
    res.redirect("/dashboard");
});
router.get("/verify", (req, res) => {
    if(req.user){
        console.log(req.user);
    } else {
        console.log("Not auth");
    }
});
router.get('/logout', (req, res) => {
    req.logout();
    req.flash("success_msg", "Successfully Logged Out");
    res.redirect('/');
});

module.exports = router;

app.js

// SETUP
const express = require("express");
const mongoose = require("mongoose");
const passport = require("passport");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const exphbs = require("express-handlebars");
const bodyParser = require("body-parser");
const methodOverride = require("method-override");
const flash = require("connect-flash");

// LOAD GOOGLE AND MONGO KEYS
const keys = require("./config/keys");

// LOAD MODELS
require("./models/story");
require("./models/user");

// PASSPORT CONFIG 
require("./config/passport")(passport);

// LOAD ROUTES
const auth = require("./routes/auth");
const index = require("./routes/index");
const stories = require("./routes/stories");

// HANLEBARS HELPERS
const {
  truncate,
  stripTags,
  formatDate,
  select,
  editIcon
} = require("./helpers/hbs");

// MONGOOSE CONNECT
mongoose.connect(keys.mongoURI)
  .then(() => {
    console.log("MongoDB Connected...");
  }).catch(err => console.log(err));

// USE APP
const app = express();

// CSS CONFIG
app.use(express.static(__dirname + "/public"));

// VIEW ENGINE
app.engine("handlebars", exphbs({
  helpers: {
    truncate: truncate,
    stripTags: stripTags,
    formatDate: formatDate,
    select: select,
    editIcon: editIcon
  },
  defaultLayout: "main"
}));
app.set("view engine", "handlebars");

// BODY PARSER
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

// METHOD OVERRIDE
app.use(methodOverride("_method"));

// FLASH
app.use(flash());

// COOKIE PARSER
app.use(cookieParser());

// SESSION MIDDLEWARE
app.use(session({
  secret: "KAPPA",
  resave: false,
  saveUninitialized: false
}));

// PASSPORT MIDDLEWARE
app.use(passport.initialize());
app.use(passport.session());

// SET GLOBAL VARS
app.use((req, res, next) => {
  res.locals.user = req.user || null;
  res.locals.success_msg = req.flash("success_msg");
  res.locals.error_msg = req.flash("error_msg");
  next();
});

// ROUTES
app.use("/", index);
app.use("/auth", auth);
app.use("/stories", stories);
Toko Goshadze

更新:嗯,我不知道这是否是愚蠢的错误,但似乎手机无法读取

callbackURL: "/auth/google/callback"

相反,我改变了与

callbackURL: keys.callback + "/auth/google/callback"

其中keys.callback是我的应用程序的网址(来自c9 / heroku)...现在可以正常使用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使Google OAuth2在CakePHP 3应用程序上运行

网站无法在移动设备上运行-加载,然后在0.2秒内恢复为Google搜索

使用Google+的Soundcloud API移动OAUTH登录无法在Android上运行

Google Oauth2在Google Domain上失败

为什么无法在移动设备上显示Google物料图标

邮递员无法完成Google OAuth2的Oauth2登录

无法从Google API OAuth2刷新令牌

为什么Google OAuth2 Playground无法返回数据?

Google OAuth2无法获取个人资料信息

Linux Headless Server(.NET)上的Google OAuth2授权

Google OAuth2 API

gosimple / oauth2和Google OAuth2

java NoClassDefFoundError:com / google / api / client / extensions / java6 / auth / oauth2 / VerificationCodeReceiver,当我在jar上但不在IDE上运行时

Google API Google Drive Node.js 无法上传文件 oAuth2

移动设备上Google地图的触摸事件

Google字体未在移动设备上加载

Google 通讯录 OAUTH2

Google OAuth2验证挂起

无法在POSTMan上获取Google oAuth 2令牌

Google Map应用程序无法在移动设备上打开Web链接

Android Google Maps v2无法在移动互联网(3g或4g)上运行,但可以在wifi上运行

python-social-auth无法获取正确的Google OAuth2详细信息

Google Drive API - 无法读取未定义的属性“OAuth2”

使用oauth2和Google API无法识别的参数

Google云端硬盘-无法下载经过身份验证(OAuth2)请求的缩略图

Google Cloud Messaging无法在公司网络上的4.1.2设备上运行

在Google OAUTH2上找不到客户端密钥

如何使用Firebase函数刷新Google oauth2上的令牌?

春季安全OAuth2在Google App Engine上导致服务器错误