Обработка Coinbase API реагирует на собственное перенаправление с авторизацией OAuth с помощьюact-native-app-auth - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть 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

1 Ответ

0 голосов
/ 19 апреля 2019

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

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

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

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

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

...