Поток аутентификации в React Native - PullRequest
0 голосов
/ 16 октября 2019

У меня проблема с созданием потока аутентификации моего приложения. То, что я на самом деле хочу, - это навигация пользователей в зависимости от их роли.

По умолчанию я создал AuthStack, который по сути является stackNavigator и имеет страницу входа. Когда пользователь входит в систему, мы получаем роль пользователя через сетевой запрос. Затем я перехожу к нему на простую домашнюю страницу, которая не возвращает ничего, кроме switchNavigator, основываясь на его роли. Вот код для большей ясности.

const AuthStack = createStackNavigator({
    Login: {
        screen: Login
    },
    SignUp: {
        screen: SignUp
    },
    Home: {
        screen: Home
    }
},
    {
        initialRouteName: 'Login',
        headerMode: 'none'
    });
const AppContainer = createAppContainer(AuthStack);
const Navigation = () => {
    return <AppContainer />
}

Когда пользователь входит в систему, я перенаправляю его на главный экран, показанный в вышеупомянутом стеке. Вот код на главном экране:

const Home = (props) => {
    const AppContainer = createAppContainer(RootNavigator(props.user.role))
    return <AppContainer />
}

Здесь я создаю новый контейнер приложения (что может быть плохой практикой, советуйте, пожалуйста). А RootNavigator - это вспомогательная функция, которая возвращает switchNavigator:

export const RootNavigator = (user) => {
return createSwitchNavigator({
    Admin: {
        screen: AdminDrawerNavigator
    },
    Reporter: {
        screen: ReporterDrawerNavigator
    }
}, 
{
    initialRouteName: user === 'admin'? 'Admin': 'Reporter'
})
}

Все это работает нормально, но кажется, что switchNavigator не работает должным образом. Если я нажму кнопку возврата оборудования, она вернется на страницу входа. Спасибо за уделенное время. Пожалуйста, предложите возможное решение.

1 Ответ

0 голосов
/ 17 октября 2019

Попробуйте сбросить историю навигации:

NavigationActions.reset({
   index: 1,
   actions: [NavigationActions.navigate({ 
                  routeName: 'Admin' 
                }),
            ]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...