Аутентификация
Я использую сеанс только для http для аутентификации пользователей с паспортом. js с использованием Github в качестве поставщика аутентификации. В результате мой клиент не может определить, аутентифицирован ли он, путем проверки файлов cookie. Я придумала решение перенаправить мой клиент после успешной аутентификации (и github перенаправляет на путь обратного вызова)
router.route('/auth/github/callback')
.get(authCtrl.passport.authenticate('github', {failureRedirect: "/signin"}),
(req,res)=>{
res.redirect("/auth/success")
}
);
, который будет выполнять обычный серверный рендеринг моего клиента и перенаправит его на соответствующий маршрут в моем клиенте:
<Route exact path="/auth/success/" component={AuthCallback} />
Authcallback выглядит следующим образом:
class AuthCallback extends Component{
state = {
dots: '.',
result: '',
redirectToReferrer: false,
error: '',
}
componentDidMount() {
signin().then((data) => {
if (data.error) {
this.setState({error: data.error})
} else {
auth.authenticate(data, () => {
this.setState({redirectToReferrer: true})
})
}
})
}
render() {
if (this.state.redirectToReferrer){
return <Redirect to={"/"}/>
}
if (this.state.error){
return "There has been an error with your login, please try again"
}
return "Login you in, Redirecting in a seoncd"
}
}
signin
в основном просто зондирует сервер, чтобы проверить, аутентифицирован ли пользователь сеансом с получить и затем я сохраняю статус аутентификации клиента в localStorage. Плюс в том, что куки-файлы, ответственные за фактическую аутентификацию, полностью недоступны для javascript. Однако я довольно новичок в React, и вся эта переадресация в моем клиенте, чтобы заставить его проверять сервер, чтобы потом просто перенаправить его обратно после того, как я получил данные с сервера, была в основном единственным способом, которым я мог заставить его работать. Я слишком усложняю это? Есть ли более простой способ?