Выполните вход в Google в собственном приложении с собственным API.Javascript

Форум по Javascript
Ответить
Anonymous
 Выполните вход в Google в собственном приложении с собственным API.

Сообщение Anonymous »

Я разрабатываю мобильное приложение с использованием React Native. На этом этапе я пытаюсь подключить его к своим API (созданным с использованием FastAPI с Authlib) для выполнения аутентификации с помощью Google.
Я не знаю, правильно ли я реализовал аутентификацию Google, но из браузера токен доступа генерируется без проблем.
Когда я пытаюсь выполнить вход в свое приложение с помощью библиотеки expo-web-browser, я получаю предупреждение CSFR, поскольку состояние в запросе отличается от состояния в ответ. Я читал, что причина этого в том, что браузер, открытый при помощи expo, не сохраняет файлы cookie.
Мне интересно, есть ли способ решить эту проблему.
Выдается следующее сообщение об ошибке:

mismatching_state: CSFR Внимание! Состояние не равно в запросе и ответе.

Код для разделов API и React Native:
config_data = {
'GOOGLE_CLIENT_ID': GOOGLE_CLIENT_ID,
'GOOGLE_CLIENT_SECRET': GOOGLE_CLIENT_SECRET
}

starlette_config = Config(environ=config_data)

oauth = OAuth(starlette_config)

oauth.register(
name='google',
server_metadata_url='https://accounts.google.com/.well-known ... figuration',
client_kwargs={'scope': 'openid email profile', 'verify': False}
)

@router.get('/login')
async def google_login(req: Request):
"""Returns a redirect to the google login page

Args:
req (Request): The inoming request

Returns:
RedirectResponse: a redirect to google login page
"""
return await oauth.google.authorize_redirect(req, GOOGLE_REDIRECT_URI)

@router.get('/callback', status_code=status.HTTP_200_OK, response_model=Token)
async def google_callback(req: Request, db = Depends(get_db)):
"""Callback endpoint from google login page to generate the access token

Args:
req (Request): The incoming request
db (Session, optional): a active database session. Defaults to Depends(get_db).

Raises:
HTTPException: 401 in case the access token can't be generated

Returns:
Token: The access token
"""
try:
user_response: OAuth2Token = await oauth.google.authorize_access_token(req)
except OAuthError as e:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=f'could not validate credentials: {e}'
)

...

return RedirectResponse(
f'.../google-callback?token={token}'
)

const handleGoogleLogin = async () => {
const redirectUrl = Linking.createURL('/google-callback')
let result = await WebBrowser.openAuthSessionAsync(
`${API_URL}/google/login`,
redirectUrl
)

if(result.type === 'success' && result.url) {
const token = result.url.split('token=b')[1]
if(token) {
await AsyncStorage.setItem('access_token', token)
setIsAuthenticated(true)
}
}
};


Подробнее здесь: https://stackoverflow.com/questions/797 ... th-own-api
Ответить

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

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

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

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

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