Často potřebujeme uživatele přihlásit přes více kanálů:
V jednoduchých aplikací, kde je to možné, používáme jako jednoznačný identifikátor email. Ten je společný pro všechny kanály. Potom je možné se přihlašovat k jednomu účtu různými kanály.
V databázi je u každého uživatele uloženo:
Není třeba ukládat Facebook ID nebo Google Open auth Token.
V aplikaci je formulář.
Do backendu se posílá jméno a heslo. Na serveru se ověřuje hash hesla.
( + je zde logika pro reset hesla, zamčení účtu při neplatných pokusech, atd. …)
V aplikaci používáme plugin cordova-plugin-facebook4 :
<plugin name="cordova-plugin-facebook4" spec="^6.0.0"> <variable name="APP_ID" value="xxxx" /> <variable name="APP_NAME" value="xxx" /> </plugin>
V kódu se volá fb.login, požaduje se email a public_profile. Po úspěšném přihlášením získáme accessToken, který se odesílá na server. Např. takto:
const result = await this.fb.login(["email", "public_profile"]); if (result && result.authResponse && result.authResponse.accessToken) { return result.authResponse.accessToken; } else { throw new Error("Facebook login - unknown error"); }
Na serveru se ověří accessToken volání API facebooku. Voláním se zároveň získá email. Tím je uživatel přihlášen.
$url = "https://graph.facebook.com/me/?fields=" . $fields . "&access_token=" . $access_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $enable_ssl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL,$url); $result=curl_exec($ch); curl_close($ch); $result = json_decode($result, true); if (isset($result["email"])) { ... }
V aplikaci používáme plugin cordova-plugin-googleplus :
<plugin name="cordova-plugin-googleplus" spec="7.0.1"> <variable name="PLAY_SERVICES_VERSION" value="11.6.2" /> <variable name="REVERSED_CLIENT_ID" value="xxxx" /> <variable name="WEB_APPLICATION_CLIENT_ID" value="xxxx" /> </plugin>
V kódu se zavolá login a získá accessToken např. takto:
const loginResult: { accessToken: string } = await this.google.login({}); return loginResult.accessToken;
Na serveru se ověří accessToken volání API googlu. Voláním se zároveň získá email. Tím je uživatel přihlášen.
$url="https://www.googleapis.com/oauth2/v3/userinfo?alt=json&access_token=".$access_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $enable_ssl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL,$url); $result=curl_exec($ch); curl_close($ch); $result = json_decode($result, true); if (isset($result["email"])) { ... }