Где поставить ClientID / Secret MERN - PullRequest
0 голосов
/ 23 мая 2019

По сути, я хочу добавить Google Oauth2.0 с паспортом в мое веб-приложение.В настоящее время у меня есть настройка Oauth в бэкэнде с помощью express, и я хочу, чтобы внешний интерфейс получил к нему доступ.

Интересно, стоит ли просто вызывать Oauth во внешнем интерфейсе и анализировать токен в бэкенде, чтобы он обновилбаза данных и т. д.

На данный момент у моей клиентской стороны есть прокси-сервер для порта, на котором работает Express.

Я попытался получить доступ к маршруту, заданному в бэкэнде вреагировать на интерфейс, надеясь, что он отправит меня на страницу, которую я настроил в бэкэнде, но просто загрузит маршрут моей страницы по умолчанию.

Это мой экспресс-бэкэнд-маршрут

const router = require('express').Router();
const passport = require('passport');

// auth login
router.get('/login', (req, res) => {
    res.render('login', { user: req.user });
});

// auth logout
router.get('/logout', (req, res) => {
    // handle with passport
    res.send('logging out');
});

// auth with google+
router.get('/google', passport.authenticate('google', {
    scope: ['profile']
}));

// callback route for google to redirect to
// hand control to passport to use code to grab profile info
router.get('/google/redirect', passport.authenticate('google'), (req, res) => {
    res.redirect(req.user)
});

module.exports = router;

Это мой экспресс index.js

const app = express();

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

// set up session cookies
app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000,
    keys: [keys.session.cookieKey]
}));

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


//MongoDB Database Setup
require('./models/db.js');


//routing Setup

// set up routes
app.use('/auth', authRoutes);

var routes = require('./routes/routes.js');
app.use('/', routes);

// The "catchall" handler: for any request that doesn't
// match one above, send back React's index.html file.

const port = process.env.PORT || 5000;
app.listen(port);

Это мой passport.config, который сохраняет пользователей в базе данных

passport.serializeUser((user, done) => {
    done(null, user.id);
});

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

passport.use(
    new GoogleStrategy({
        // options for google strategy
        clientID: keys.google.clientID,
        clientSecret: keys.google.clientSecret,
        callbackURL: '/auth/google/redirect'
    }, (accessToken, refreshToken, profile, done) => {
      console.log("got profile");
      var googleId = {'googleId': profile.id};
      Users.findOne(googleId).then((currentUser)=>{
        if(currentUser){
          console.log("user chilling");
          done(null, currentUser);
        }
        else{
          //create new user
          new Users({
            googleId: profile.id,
            username: profile.displayName,
          }).save().then((newUser) => {
            console.log('New user created: ' + newUser);
            done(null, newUser);
          });
        }
      });
      done(null);
    })
);

Кроме того, что я пытаюсь вызвать его во внешнем интерфейсе, не выставляяКлючи, после вызова базы данных, он сохраняет, но браузер возвращает неавторизованный на странице.

Любая помощь приветствуется :), (извините, действительно не используйте stackoverflow, мое форматирование выглядит плохо)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...