Невозможно реализовать «Войти через Google в React Native Expo»Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно реализовать «Войти через Google в React Native Expo»

Сообщение Anonymous »

Я пытался реализовать вход в Google на выставке expo go, следуя почти всем руководствам на YouTube и правильно настроив его, но каждый раз, когда я нажимаю кнопку, если использую androidClientId, я перенаправляюсь на всплывающее окно, в котором отображается ошибка : «Доступ заблокирован, ошибка 400: redirect_uri_mismatch» что-то в этом роде, но если я использую clientId вместо androidClientId, он перенаправляется во всплывающее окно, где я могу выбрать учетную запись, и после выбора учетной записи я попадаю на страницу, на которой отображается ошибка, например «Что-то произошла ошибка при попытке завершить вход в систему. Пожалуйста, закройте этот экран, чтобы вернуться в приложение», и после нажатия кнопки «Закрыть» и возвращения в приложение в «Expo Go» я получаю тип ответа «Отклонить».

Код: Выделить всё

import React, { useState, useEffect } from 'react';
import { View, Text, Pressable } from 'react-native';
import { useNavigation } from 'expo-router';
import { NavigationProp } from '@/lib/types';
import * as Google from 'expo-auth-session/providers/google';
import * as WebBrowser from 'expo-web-browser';
import AsyncStorage from '@react-native-async-storage/async-storage';

WebBrowser.maybeCompleteAuthSession();

const Index = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [userInfo, setUserInfo] = useState(null);
const navigation = useNavigation();

const webClientId = '';
const androidId = '';

const [request, response, promptAsync] = Google.useAuthRequest({
clientId: webClientId,
// androidClientId: androidId,
scopes: ['profile', 'email'],
redirectUri: 'https://auth.expo.io/@username/Frontend',
});

useEffect(() => {
handleSignInWithGoogle();
}, [response]);

const handleSignInWithGoogle = async () => {
if (response?.type === 'success') {
const { accessToken } = response.authentication || {};
await getUserInfo(accessToken ?? '');
} else if (response?.type === 'error') {
console.error('Error during Google sign-in:', response.error);
} else {
console.warn('User dismissed the sign-in dialog or unknown response type');
}
};

const getUserInfo = async (token: any) => {
if (!token) return;

try {
const res = await fetch('https://www.googleapis.com/userinfo/v2/me', {
headers: { Authorization: `Bearer ${token}` },
});
const user = await res.json();
await AsyncStorage.setItem('@user', JSON.stringify(user));
setUserInfo(user);
} catch (error) {
console.error('Failed to fetch user info:', error);
}
};

return (

{JSON.stringify(userInfo)}
 promptAsync()}>
Login with Google


);
};

export default Index;
Любая помощь будет оценена по достоинству!
Примечание. Я установил пустые значения androidClientId и webClientId только при вставке сюда, а не в исходный код.
п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... ative-expo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»