āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰāĻā§ OAuth āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āϝā§āĻŽāύ GitHub āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase-āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰāϤ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§ āĻā§āύā§āϰāĻŋāĻ OAuth āϞāĻāĻāύāĻā§ āĻāĻā§āĻā§āϤ āĻāϰ⧠Firebase SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻžāĻāύ-āĻāύ āĻĒā§āϰāĻŦāĻžāĻš āĻļā§āώ āĻāϰāϤā§āĨ¤
āĻāĻĒāύāĻŋ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻā§
GitHub āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϏāĻžāĻāύ āĻāύ āĻāϰāϤā§, āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻžāĻāύ-āĻāύ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āĻšāĻŋāϏāĻžāĻŦā§ GitHub āϏāĻā§āώāĻŽ āĻāϰāϤ⧠āĻšāĻŦā§:
āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āύāĻŋāϰā§āĻāϰāϤāĻž āĻāύāϏā§āĻāϞ āĻāĻŦāĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠āϏā§āĻāĻĢāĻ āĻĒā§āϝāĻžāĻā§āĻ āĻŽā§āϝāĻžāύā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
- Xcode-āĻ, āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒ āĻĒā§āϰāĻāϞā§āĻĒ āĻā§āϞāĻžāϰ āϏāĻžāĻĨā§, āĻĢāĻžāĻāϞ > āĻĒā§āϝāĻžāĻā§āĻ āϝā§āĻ āĻāϰā§āύ -āĻ āύā§āĻāĻŋāĻā§āĻ āĻāϰā§āύāĨ¤
- āĻ āύā§āϰā§āϧ āĻāϰāĻž āĻšāϞā§, Firebase Apple āĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽ SDK āϏāĻāĻā§āϰāĻšāϏā§āĻĨāϞ āϝā§āĻ āĻāϰā§āύ:
- Firebase Authentication āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦā§āĻā§ āύāĻŋāύāĨ¤
- āĻāĻĒāύāĻžāϰ āϞāĻā§āώā§āϝā§āϰ āĻŦāĻŋāϞā§āĻĄ āϏā§āĻāĻŋāĻāϏā§āϰ āĻ
āύā§āϝāĻžāύā§āϝ āϞāĻŋāĻā§āĻāĻžāϰ āĻĢā§āϞā§āϝāĻžāĻ āĻŦāĻŋāĻāĻžāĻā§
-ObjC
āĻĒāϤāĻžāĻāĻž āϝā§āĻ āĻāϰā§āύāĨ¤ - āĻļā§āώ āĻšāϝāĻŧā§ āĻā§āϞā§, Xcode āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻĒāĻāĻā§āĻŽāĻŋāϤ⧠āĻāĻĒāύāĻžāϰ āύāĻŋāϰā§āĻāϰāϤāĻžāĻā§āϞāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻāĻŦāĻ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰāĻž āĻļā§āϰ⧠āĻāϰāĻŦā§āĨ¤
https://github.com/firebase/firebase-ios-sdk.git
āĻāĻāύ, āĻāĻŋāĻā§ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĒāĻĻāĻā§āώā§āĻĒ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰā§āύ:
- Firebase āĻāύāϏā§āϞ⧠, Auth āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻā§āϞā§āύāĨ¤
- āϏāĻžāĻāύ āĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻā§āϝāĻžāĻŦā§, GitHub āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āϏāĻā§āώāĻŽ āĻāϰā§āύāĨ¤
- āϏā§āĻ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āĻĄā§āĻā§āϞāĻĒāĻžāϰ āĻāύāϏā§āϞ āĻĨā§āĻā§ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āϏāĻŋāĻā§āϰā§āĻ āϝā§āĻ āĻāϰā§āύ:
- GitHub-āĻ āĻĄā§āĻā§āϞāĻĒāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻšāĻŋāϏā§āĻŦā§ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒ āύāĻŋāĻŦāύā§āϧāύ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ OAuth 2.0 āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āϏāĻŋāĻā§āϰā§āĻ āĻĒāĻžāύāĨ¤
- āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝ⧠āĻāĻĒāύāĻžāϰ Firebase OAuth āϰāĻŋāĻĄāĻžāĻāϰā§āĻā§āĻ URI (āϝā§āĻŽāύ
my-app-12345.firebaseapp.com/__/auth/handler
) āĻāĻĒāύāĻžāϰ GitHub āĻ ā§āϝāĻžāĻĒā§āϰ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āϏā§āĻāĻŋāĻāϏ āĻĒā§āώā§āĻ āĻžāϝāĻŧ āĻāĻĒāύāĻžāϰ āĻ āύā§āĻŽā§āĻĻāύ āĻāϞāĻŦā§āϝāĻžāĻ URL āĻšāĻŋāϏā§āĻŦā§ āϏā§āĻ āĻāϰāĻž āĻāĻā§āĨ¤
- Save āĻ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤
Firebase SDK āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻāύ-āĻāύ āĻĢā§āϞ⧠āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ
Firebase Apple āĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽ SDK-āĻāϰ āϏāĻžāĻĨā§ āϏāĻžāĻāύ-āĻāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤā§, āĻāĻ āϧāĻžāĻĒāĻā§āϞāĻŋ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύ:
āĻāĻĒāύāĻžāϰ Xcode āĻĒā§āϰāĻāϞā§āĻĒā§ āĻāĻžāϏā§āĻāĻŽ URL āϏā§āĻāĻŋāĻŽ āϝā§āĻ āĻāϰā§āύ:
- āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻā§āϞā§āύ: āĻŦāĻžāĻŽ āĻā§āϰāĻŋ āĻāĻŋāĻāϤ⧠āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āύāĻžāĻŽā§ āĻĄāĻžāĻŦāϞ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤ āϞāĻā§āώā§āϝ āĻŦāĻŋāĻāĻžāĻ āĻĨā§āĻā§ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒāĻāĻŋ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āϤāĻĨā§āϝ āĻā§āϝāĻžāĻŦāĻāĻŋ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύ āĻāĻŦāĻ URL āĻĒā§āϰāĻāĻžāϰ āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻāϰā§āύ⧎
- + āĻŦā§āϤāĻžāĻŽā§ āĻā§āϞāĻŋāĻ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻāĻŋ URL āϏā§āĻāĻŋāĻŽ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāύāĻā§āĻĄ āĻāϰāĻž āĻ
ā§āϝāĻžāĻĒ āĻāĻāĻĄāĻŋ āϝā§āĻ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ iOS āĻ
ā§āϝāĻžāĻĒā§āϰ āĻŦāĻŋāĻāĻžāĻā§ Firebase āĻāύāϏā§āϞā§āϰ āϏāĻžāϧāĻžāϰāĻŖ āϏā§āĻāĻŋāĻāϏ āĻĒā§āώā§āĻ āĻžāϝāĻŧ āĻāĻĒāύāĻžāϰ āĻāύāĻā§āĻĄ āĻāϰāĻž āĻ
ā§āϝāĻžāĻĒ āĻāĻāĻĄāĻŋ āĻā§āĻāĻā§ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻ
āύā§āϝāĻžāύā§āϝ āĻā§āώā§āϤā§āϰāĻā§āϞāĻŋ āĻĢāĻžāĻāĻāĻž āϰāĻžāĻā§āύāĨ¤
āϏāĻŽā§āĻĒāύā§āύ āĻšāϞā§, āĻāĻĒāύāĻžāϰ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύāĻāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤāĻā§āϞāĻŋāϰ āĻŽāϤ⧠āĻĻā§āĻāϤ⧠āĻšāĻŦā§ (āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ-āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŽāĻžāύāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§):
āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ github.com āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ OAuthProvider āĻāϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤
āϏā§āĻāĻĢāĻ
var provider = OAuthProvider(providerID: "github.com")
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
āĻāĻā§āĻāĻŋāĻ : āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻāĻžāϏā§āĻāĻŽ OAuth āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύ āϝāĻž āĻāĻĒāύāĻŋ OAuth āĻ āύā§āϰā§āϧā§āϰ āϏāĻžāĻĨā§ āĻĒāĻžāĻ āĻžāϤ⧠āĻāĻžāύāĨ¤
āϏā§āĻāĻĢāĻ
provider.customParameters = [ "allow_signup": "false" ]
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
[provider setCustomParameters:@{@"allow_signup": @"false"}];
GitHub āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ, GitHub OAuth āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻĻā§āĻā§āύāĨ¤ āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āĻāĻĒāύāĻŋ
setCustomParameters
āĻĻāĻŋāϝāĻŧā§ Firebase-āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĒāĻžāϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻžāĨ¤ āĻāĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞāĻŋ āĻšāϞ client_id , redirect_uri , response_type , scope āĻāĻŦāĻ state āĨ¤āĻāĻā§āĻāĻŋāĻ : āĻŽā§āϞāĻŋāĻ āĻĒā§āϰā§āĻĢāĻžāĻāϞā§āϰ āĻŦāĻžāĻāϰ⧠āĻ āϤāĻŋāϰāĻŋāĻā§āϤ OAuth 2.0 āϏā§āĻā§āĻĒ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύ āϝāĻž āĻāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āĻāĻžāĻ āĻĨā§āĻā§ āĻ āύā§āϰā§āϧ āĻāϰāϤ⧠āĻāĻžāύāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ GitHub APIs āĻĨā§āĻā§ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻĄā§āĻāĻž āĻ ā§āϝāĻžāĻā§āϏā§āϏā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāĻā§ GitHub āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰ⧠āĻāύāϏā§āϞ⧠API āĻ āύā§āĻŽāϤāĻŋāĻā§āϞāĻŋāϰ āĻ āϧā§āύ⧠GitHub APIāĻā§āϞāĻŋ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋāϰ āĻ āύā§āϰā§āϧ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻ āύā§āϰā§āϧ āĻāϰāĻž OAuth āϏā§āĻā§āĻĒāĻā§āϞāĻŋāĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻ ā§āϝāĻžāĻĒā§āϰ API āĻ āύā§āĻŽāϤāĻŋāĻā§āϞāĻŋāϤ⧠āĻĒā§āϰāĻŋ-āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻšā§āĻŦāĻšā§ āĻŽāĻŋāϞ⧠āϝā§āϤ⧠āĻšāĻŦā§āĨ¤
āϏā§āĻāĻĢāĻ
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = ["user:email"]
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. [provider setScopes:@[@"user:email"]];
āĻāϰāĻ āĻāĻžāύāϤā§, GitHub āϏā§āĻā§āĻĒ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻĒāĻĄāĻŧā§āύāĨ¤
āĻāĻā§āĻāĻŋāĻ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻžāĻā§ reCAPTCHA āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒ āϝā§āĻāĻžāĻŦā§
SFSafariViewController
āĻŦāĻžUIWebView
āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰ⧠āϤāĻž āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻ āĻāϰāϤ⧠āĻāĻžāĻāϞā§,AuthUIDelegate
āĻĒā§āϰā§āĻā§āĻāϞā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻāĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻŋāĻā§credentialWithUIDelegate
āĻ āĻĒāĻžāϏ āĻāϰā§āύāĨ¤OAuth āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰ⧠āĻ āĻŦāĻā§āĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰā§āύāĨ¤
āϏā§āĻāĻĢāĻ
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. guard let oauthCredential = authResult.credential as? OAuthCredential else { return } // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken } } }
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential; // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken }]; } }];
OAuth āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻā§āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻĒāύāĻŋ GitHub API āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻŽā§āϞāĻŋāĻ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āϤāĻĨā§āϝ āĻĒā§āϤā§, āĻāĻĒāύāĻŋ
Authorization
āĻļāĻŋāϰā§āύāĻžāĻŽā§ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻā§āĻā§āύ āĻĒāĻžāϏ āĻāϰ⧠REST API āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:https://api.github.com/user
āϝāĻĻāĻŋāĻ āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻā§āϞāĻŋ āϏāĻžāĻāύ-āĻāύ āĻĒā§āϰāĻŦāĻžāĻšā§āϰ āĻāĻĒāϰ āĻĢā§āĻāĻžāϏ āĻāϰā§, āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ GitHub āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϞāĻŋāĻā§āĻ āĻāϰāĻžāϰ āĻā§āώāĻŽāϤāĻžāĻ āϰāϝāĻŧā§āĻā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻĒāύāĻŋ āĻāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻžāϧāĻŋāĻ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āĻā§ āϞāĻŋāĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻžāϤ⧠āϤāĻžāĻĻā§āϰ āĻāĻāϝāĻŧā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻāύ āĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ⧎
āϏā§āĻāĻĢāĻ
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
āĻāĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
reauthenticateWithCredential
āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āϝāĻž āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ āϞāĻāĻāύ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻāĻŽāύ āϏāĻāĻŦā§āĻĻāύāĻļā§āϞ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒā§āϰ āĻāύā§āϝ āύāϤā§āύ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤āϏā§āĻāĻĢāĻ
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻāĻāĻŋ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϞāĻŋāĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧâāĻ āϰā§āĻĨāĻžā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ, āĻĢā§āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āϤāĻĨā§āϝ â āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āĻā§āύāĨ¤ āĻāĻ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ āύāĻž āĻā§āύ, āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ ā§āϝāĻžāĻĒ āĻā§āĻĄāĻŧā§ āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻļāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§, āĻāĻĒāύāĻŋ
User
āĻ āĻŦāĻā§āĻā§āĻ āĻĨā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŽā§āϞāĻŋāĻ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āϤāĻĨā§āϝ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻĻā§āĻā§āύāĨ¤āĻāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ Cloud Storage āϏā§āϰāĻā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§ , āĻāĻĒāύāĻŋ
auth
āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĨā§āĻā§ āϏāĻžāĻāύ-āĻāύ āĻāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ āύāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āύ āĻĄā§āĻāĻž āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϤāĻž āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻāύ āĻāĻāĻ āĻāϰāϤā§, signOut:
āϏā§āĻāĻĢāĻ
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
āĻāĻĻā§āĻĻā§āĻļā§āϝ-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
āĻāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϤā§āϰā§āĻāĻŋāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĒāϰāĻŋāϏāϰā§āϰ āĻāύā§āϝ āϤā§āϰā§āĻāĻŋ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ āĻā§āĻĄ āϝā§āĻ āĻāϰāϤ⧠āĻāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻā§āύ.