SSL блокирует вход в систему с использованием Passport, полностью работая на localhost - PullRequest
0 голосов
/ 05 июля 2019

Я создал небольшое приложение для аутентификации с помощью Passport.На localhost он работает просто отлично, что, кстати, небезопасно.Но в моем домене с Cloudflare SSL я не уверен, что происходит, я не могу получить доступ к экрану согласия со стратегиями Google и GitHub.Я не очень разбираюсь в ssl-сертификате и хочу знать, какая часть неверна на моем сервере.

Я добавил app.set ('trust proxy'), app.use (cors ()),установите «proxy: true» в обеих стратегиях.

Вот соответствующая часть кода и действующий код на моем домене https://authapp.mambaoro.com

В index.js

app.set('trust proxy', 1);
app.use(cors());
app.use(
session({
secret: process.env.SESSION_KEY_1,
proxy: true,
saveUninitialized: false,
resave: false,
maxAge: 6.048e8,
}),
);
app.use(passport.initialize());
app.use(passport.session());
app.use('/auth', authRoutes);

app.get('/getUser', (req, res) => {
 if (!req.user) {
  return res.send({ isAuthenticated: false });
 }
 res.send(req.user);
});

В passport-setup.js

passport.use(
new GoogleStrategy(
{
  clientID: process.env.GOOGLE_CLIENT_ID,
  clientSecret: process.env.GOOGLE_CLIENT_SECRET,
  callbackURL: process.env.GOOGLE_CALLBACK_URL,
  proxy: true,
},
async (accesToken, refreshToken, profile, done) => {
  try {
    await User.sync();
    const newUser = await User.findOrCreate({
      where: {
        googleId: profile.id,
        username: profile.displayName,
        profileImageUrl: profile.photos[0].value,
      },
    });
    done(null, newUser[0]);
  } catch (e) {
    done(e);
      }
    },
   ),
  );

 passport.use(
  new GithubStrategy(
   {
    clientID: process.env.GITHUB_CLIENT_ID,
    clientSecret: process.env.GITHUB_CLIENT_SECRET,
    callbackURL: process.env.GITHUB_CALLBACK_URL,
    proxy: true,
   },
  async (accessToken, refreshToken, profile, done) => {
   try {
    await User.sync();
    const newUser = await User.findOrCreate({
      where: {
        githubId: profile.id,
        username: profile.username,
        profileImageUrl: profile.photos[0].value,
      },
    });
    done(null, newUser[0]);
  } catch (e) {
    done(e);
      }
    },
  ),
);

В auth-rout.js

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

);

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

В index.js Наклиент с React, код ниже используется для получения данных пользователя с помощью Passport, если существует файл cookie.

function SignUser() {
 const [user, setUserData] = useState(null);
 const [isAuthenticated, setIsAuth] = useState(false);
 useEffect(() => {
  const getUser = async () => {
  const res = await axios.get('/getUser');
  res.data.user && setUserData(res.data.user);
  res.data.isAuthenticated && setIsAuth(true);
 };
 getUser();
 }, []);
 ...
...