Обработка Coinbase API реагирует на собственное перенаправление с авторизацией OAuth с помощью response-native-app-auth

У меня OAuth работает в React Native с помощью response-native-app-auth. Мое приложение без проблем перенаправляется на Coinbase для авторизации OAuth. Однажды возникает проблема, как вернуться в мое приложение с токеном. В веб-настройке вы можете предоставить URI перенаправления, но для мобильных устройств его не существует. Согласно документации Coinbase, способ сделать это - использовать специальную строку перенаправления с именем urn: ietf: wg: oauth: 2.0: oob. У меня есть этот набор в настройках приложения Coinbase, и я также передаю его в конфигурации с помощью response-native-app-auth. Что происходит, когда я авторизуюсь, я получаю пустой экран на моем мобильном телефоне с возможностью отмены. Я отменяю, он просто возвращает меня в приложение, как будто я никогда не инициировал запрос. Я думаю, что мне что-то не хватает, чтобы позволить xcode перехватить перенаправление и передать меня обратно в приложение.

index.js:

import { authorize } from 'react-native-app-auth';

const config = {
    issuer: 'https://www.coinbase.com/oauth/authorize',
    clientId: '<removed',
    redirectUrl: 'urn:ietf:wg:oauth:2.0:oob',
    scopes: ['wallet:accounts:read'],
    serviceConfiguration: {
        authorizationEndpoint: 'https://www.coinbase.com/oauth/authorize',
        tokenEndpoint: 'https://api.coinbase.com/oauth/token',
        revocationEndpoint: 'https://api.coinbase.com/oauth/revoke'
    }
};

class App extends Component {
    componentDidMount() {
        authorize(config)
        .then(response => {
            console.log(response);
        })
        .catch(error => {
            console.log(error);
        });
    }

    render() {
        return (
            <View style={{ flex: 1 }}>
                <Text>OAuth</Text>
            </View>
        );
    }
}

export default App;

AppDelegate.h:

#import <UIKit/UIKit.h>
#import "RNAppAuthAuthorizationFlowManager.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate,     RNAppAuthAuthorizationFlowManager>

@property (nonatomic, strong) UIWindow *window;
@property (nonatomic, weak) id <RNAppAuthAuthorizationFlowManagerDelegate>authorizationFlowManagerDelegate;

@end

person Michael Whittle    schedule 18.04.2019    source источник


Ответы (1)


Так что у меня это работает. Вам необходимо настроить схему URL и Deep Linking в Xcode и React. Родные. Например, я использовал «MyApp» в схеме URL-адресов. Итак, теперь после авторизации Coinbase перенаправляет обратно на MyApp: // oauth, что переключает меня обратно на мое приложение. Все работает действительно безупречно. Я вижу, что это сработало, когда я получаю электронное письмо от Coinbase, в котором говорится, что приложение было успешно связано с моей учетной записью. Я также смог убедиться в том, что мои глубокие ссылки работают, перейдя в MyApp: // в Safari, что без проблем переключило меня обратно на мое приложение.

Теперь у меня другая проблема. Хотя авторизация сработала, и я снова переключился на свое приложение, я не заметил, чтобы в React Native что-то фиксировалось. Я должен увидеть жетон.

На странице React Native написано, что это должно его поймать ...

componentDidMount() {
  Linking.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
  Linking.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
  console.log(event.url);
}

Кто-нибудь, как я могу запросить или проверить полученный токен? Функция авторизации в response-native-app-auth ничего не возвращает, а прослушиватель Deep Linking, похоже, ничего не возвращает.

person Michael Whittle    schedule 19.04.2019
comment
Пожалуйста, не задавайте второстепенных вопросов в своих ответах. Если сейчас у вас возникла новая проблема, вам следует задать отдельный вопрос. - person Dharman; 12.11.2019