Перенаправление для получения в React (паспорт. js Authenticaton) - PullRequest
0 голосов
/ 09 марта 2020

Аутентификация

Я использую сеанс только для 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, и вся эта переадресация в моем клиенте, чтобы заставить его проверять сервер, чтобы потом просто перенаправить его обратно после того, как я получил данные с сервера, была в основном единственным способом, которым я мог заставить его работать. Я слишком усложняю это? Есть ли более простой способ?

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