Sådan konfigureres React Native-godkendelse med react-native-app-auth

Versioner
Før vi starter, skal du sørge for at have følgende versioner installeret:
“Reagere”: “16.8.3”,
“React-native”: “0.59.1”,
“React-native-contacts”: “3.1.5”,
Her er linket til Github repo, hvis du vil tjekke det ud : //github.com/FormidableLabs/react-native-app-auth
React-native-app-auth bruges til at give godkendelse i dine react-native applikationer. I mit tilfælde prøvede jeg at bruge det med Google, så her er en forklaring på, hvordan du kan installere og bruge det til ovenstående versioner.
I deres dokumentation forklares det også som en React Native bridge til AppAuth-iOS og AppAuth-Android SDKS til kommunikation med OAuth 2.0 og OpenID Connect-udbydere.
Testede OpenID-udbydere:
Disse udbydere er OpenID-kompatible, hvilket betyder, at du kan bruge autodiscovery:
- Identity Server4 (eksempelkonfiguration)
- Identity Server3 (eksempelkonfiguration)
- Google (eksempelkonfiguration)
- Okta (eksempelkonfiguration)
- Keycloak (eksempelkonfiguration)
- Azure Active Directory (eksempelkonfiguration)
- AWS Cognito (eksempelkonfiguration)
Testede OAuth2-udbydere:
Disse udbydere implementerer OAuth2-spec, men er ikke OpenID-udbydere, hvilket betyder, at du selv skal konfigurere autorisationen og token-slutpunkter.
- Uber (eksempelkonfiguration)
- Fitbit (eksempelkonfiguration)
- Dropbox (eksempelkonfiguration)
- Reddit (eksempelkonfiguration)
Installation
npm install react-native-app-auth --savereact-native link react-native-app-auth
IOS
I dokumentationen er der tre måder at implementere denne tilstand på, men jeg foretrækker CocoaPods.
Hvis du bruger CocoaPods for første gang, skal du udføre nedenstående trin:
sudo gem install cocoapods
Åbn fra din rodmappe
cd ios
pod init
Pod init-kommandoen initialiserer Podfilen i din iOS-mappe.
Tilføj derefter denne linje nedenfor i din Podfile efter mål 'your_app' do
pod 'AppAuth', '0.95.0'
Registrer ordnings-URL-ordning
Hvis du agter at understøtte iOS 10 og ældre, skal du definere de understøttede omdirigerings-URL-ordninger i din Info.plist
som følger:
Bemærk: Du får disse værdier fra oauth-udbyderen .
For google: //console.developers.google.com/
CFBundleURLTypes CFBundleURLName com.your.app.identifier CFBundleURLSchemes io.identityserver.demo
CFBundleURLName
er enhver globalt unik streng. En almindelig praksis er at bruge din app-id.CFBundleURLSchemes
er en række webadresseskemaer, som din app skal håndtere. Ordningen er begyndelsen på din OAuth-omdirigerings-URL, op til skemaseparatortegnet (:
).
Definer openURL callback i AppDelegate
Du skal bevare godkendelsessessionen for at fortsætte godkendelsesstrømmen fra omdirigering. Følg disse trin:
Foretag AppDelegate
overensstemmelse RNAppAuthAuthorizationFlowManager
med følgende ændringer til AppDelegate.h
:
+ #import "RNAppAuthAuthorizationFlowManager.h"
- @interface AppDelegate : UIResponder + @interface AppDelegate : UIResponder
+ @property(nonatomic, weak)idauthorizationFlowManagerDelegate;
Skift følgende metode fra UIApplicationDelegate
i AppDelegate.m
:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { return [self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:url];}
Android
Efter vellykket sammenkædning skal du tilføje android / app / build.grandle- fil defaultConfig-værdi, da dine identifikatorer omdirigerer url.
manifestPlaceholders = [
appAuthRedirectScheme: “io.identityserver.demo”
]
Anvendelse
import { authorize } from 'react-native-app-auth';
// base configconst config = { issuer: '', clientId: '', redirectUrl: '', scopes: [''],};
// use the client to make the auth request and receive the authStatetry { const result = await authorize(config); // result includes accessToken, accessTokenExpirationDate and refreshToken} catch (error) { console.log(error);}
Glad kodning!
Tak fordi du læste så langt. Hvis du kunne lide dette indlæg, så del, kommenter og tryk på det? et par gange (op til 50 gange). . . Måske hjælper det nogen.
Følg mig på Medium eller Github, hvis du er interesseret i mere dybtgående og informative skrivninger som disse i fremtiden. ?