Я создал экспресс-приложение и create-react-app
.На react app
я изменяю файл /src/App.js:
import React from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="http://localhost:3000/auth/google"
target="_blank"
rel="noopener noreferrer"
>
Login google
</a>
</header>
</div>
);
}
export default App;
И после этого я написал некоторый код для google authenticate на бэкенде.
Здесь я инициализирую ressport.Я использую массив users
в качестве базы данных.
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth2');
const users = [];
passport.serializeUser((user, done) => {
console.log('serialize user. id = ', user.id);
done(null, user.id);
});
passport.deserializeUser((id, done) => {
console.log('deseri
req.session = null;alize user. id = ', id);
const user = users.find(u => u.id === id);
done(null, user);
});
passport.use(
new GoogleStrategy({
callbackURL: '/auth/google/redirect',
clientID: 'xxx',
clientSecret: 'xxx'
}, (accessToken, refreshToken, profile, done) => {
const user = {
id: profile.id,
username: profile.displayName
};
if (users.find(u => u.id === user.id)) {
console.log('user exist');
done(null, user);
} else {
console.log('user is new');
users.push(user);
done(null, user);
}
})
);
А вот мои маршруты.
router.get('/auth/google', passport.authenticate('google', {
scope: ['profile']
}));
router.get('/auth/google/redirect',
passport.authenticate('google'),
(req, res) => {
res.send(`Hi, ${req.user.username}`);
}
);
ОК.Это работает.Я иду на http://localhost:9005
в моем браузере.Затем я нажимаю Login
.Выберите мою учетную запись Google.И стать перенаправленным на http://localhost:3000
, где я вижу Hello, Aleksandr
.Но проблема в порте 3000
.Мое приложение реагирует на порт 9005
.Я хочу, чтобы пользователь оставался на моем сайте после аутентификации.Пожалуйста, помогите мне с этим.