#react-native #authentication #jwt #google-oauth #openid-connect
#react-native #аутентификация #jwt #google-oauth #openid-connect
Вопрос:
Я работаю над приложением react native, и у меня возникли некоторые проблемы с OpenID connect. Я хотел бы использовать некоторые функции «Входа в систему с помощью Google».
В обычном (не родном) приложении react я использую библиотеку react-google-login следующим образом:
import { GoogleLogin} from 'react-google-login';
import axios from 'axios';
const CLIENT_ID = 'xxxxx.apps.googleusercontent.com';
const Login = () => {
const loginHandler = (response) => {
// I can use the OpenID JWT token got as response.tokenId e.g.
axios.get("/myapi", {
headers: {
Authorization: 'Bearer ' response.tokenId
}
}).then(res => {
...
});
}
return (
<React.Fragment>
<GoogleLogin
clientId={CLIENT_ID}
buttonText='Login'
onSuccess={loginHandler}
cookiePolicy={'single_host_origin'}
responseType='code,token'
uxMode="redirect"
/>
</React.Fragment>
)
}
export default Login;
В обработчике входа в систему, как вы можете видеть, я могу использовать токен OpenID JWT и отправить его на сервер.
Мне нужно то же самое в React Native, но я не нашел для этого какой-либо простой библиотеки. Ни один из них не возвращает токен OpenID JWT, а только токен доступа Oauth2.
У кого-нибудь есть идеи, какую библиотеку я должен использовать и как?
Спасибо
Ответ №1:
Возможно, вам следует использовать эту библиотеку
npm install react-native-app-auth --savereact-native link react-native-app-auth
Если вы используете yarn в качестве менеджера пакетов
yarn add @react-native-app-auth
Комментарии:
1. Спасибо за быстрый ответ. Однако было бы неплохо использовать какой-нибудь expo API. Я нашел API Google , но он возвращает только стандартный токен доступа Oauth2, но не токен OpenID connect JWT. Другой — GoogleSignIn , но у него есть другие ограничения, описанные здесь forums.expo.io/t/could-not-sign-in-google-with-expo-sdk-33 / … Но в конце концов кажется, что я должен использовать библиотеку, не связанную с выставкой. Например, тотвы упомянули.
Ответ №2:
Наконец мне удалось добиться этого с помощью AppAuth