【问题标题】:Redirect user to Angular route after success google authgoogle auth 成功后将用户重定向到 Angular 路由
【发布时间】:2019-03-14 17:31:24
【问题描述】:

我有一个问题,我无法将用户重定向到有角度的路线,就像这里的例子:

  • 我在登录页面,点击谷歌登录,重定向到谷歌,成功登录,然后我想进入我的应用程序,比如新闻提要。

到目前为止,我所做的是在 express 应用程序中使用护照。这是google的路线和护照策略。

router.get('/google', passport.authenticate('google', {
  scope: ['profile', 'email']
}))

router.get('/google/callback', passport.authenticate('google', {
  successRedirect: '/profile',
  failureRedirect: '/'
}))

这是我存储用户的谷歌策略。

    passport.use(new GoogleStrategy({
    clientID: Config.google.GOOGLE_CLIENT_ID,
    clientSecret: Config.google.GOOGLE_CLIENT_SECRET,
    callbackURL: Config.google.CALLBACK_URL,
    passReqToCallback : true
},
function(req, token, refreshToken, profile, done) {
    process.nextTick(function() {
        if (!req.user) {
            User.findOne({ 'google.id' : profile.id }, function(err, user) {
                if (err) { return done(err) }

                if (user) {
                    if (!user.google.token) {
                        user.google.token = token
                        user.google.name = profile.displayName
                        user.google.email = profile.emails[0].value;
                        user.username = profile.displayName.replace(/\s+/g, '-').toLowerCase();

                        user.save(function(err) {
                            if (err) { throw err }
                            return done(null, user)
                        })
                    }
                    return done(null, user)
                } else {
                    var newUser = new User()
                    newUser.google.id = profile.id
                    newUser.google.token = token
                    newUser.google.name = profile.displayName
                    newUser.google.email = profile.emails[0].value;
                    newUser.username = profile.displayName.replace(/\s+/g, '-').toLowerCase();

                    newUser.save(function(err) {
                        if (err) { throw err }
                        return done(null, newUser)
                    })
                }
            })
        } else {
            var user = req.user
            user.google.id = profile.id
            user.google.token = token
            user.google.name = profile.displayName
            user.google.email = profile.emails[0].value;
            user.username = profile.displayName.replace(/\s+/g, '-').toLowerCase();
            user.save(function(err) {
                if (err) { throw err }
                return done(null, user)
            })
        }
    })
}))

那么我怎样才能让它重定向到角度路由,例如 localhost:4200/app/feed,这是正常电子邮件登录的流程。

【问题讨论】:

  • 你找到了实现这个的方法吗?

标签: javascript node.js angular express


【解决方案1】:

你能在这里配置并检查一下

router.get('/google/callback', passport.authenticate('google', {
  successRedirect: '/profile',
  failureRedirect: '/'
}))

router.get('/google/callback', passport.authenticate('google', {
  successRedirect: '/app/feed',
  failureRedirect: '/'
}))

【讨论】:

  • 我的后端在 localhost:3000 上,所以这将返回到 localhost:3000/app/feed 这不是来自 Angular 的路由,我使用 Angular 作为前端,所以这就是问题所在
  • 你可以试试这个看看结果如何,successRedirect: ' http://localhost:3000/app/feed ',
  • 我想你不明白我的问题。我不想在后端重定向,因为我需要将它们重定向到我的前端应用程序
  • 我认为,如果您配置了代理,那么端口无关紧要,您可以通过 4200 访问所有资源,将配置的路由传递给 3000。因此,@VivekKumar 建议的重定向应该可以工作,恕我直言。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2018-05-12
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2018-01-21
  • 2017-08-10
相关资源
最近更新 更多