Anmeldung mit Google Mail und spezifischer E-Mail-Adresse erlaubt in CakePHP 3.x
Komponisten anmelden
"google/apiclient": "^2.0"
Pflicht gmail mit Login
https://console.developers.google.com/apis/credentials?project=mdpms-187410&organizationId=1095988912954
erstellen zu installieren Projekt und erstellen geheimer Schlüssel und Client-ID
Projekt in Setnamen und umleiten URL
HINWEIS: - Umleitung URL .com und .org-Domain sein muss Wenn Sie in der lokalen Maschine entwickeln dann folgt Art von virtueller Host example.com und example.org erstellen
virtuellen Host erstellen dann Folgen Sie diesem Schritt:
Set-Konfigurationsdatei in app_globle.php
'Google' =>
[
'googleClientID' => '123456.apps.googleusercontent.com',
'googleClientSecret' => 'abcdefghi',
'googleRedirectUrl' => 'http://example.com/oauth2callback'
]
Google Mail-Login Route
// Google Login
$routes->connect('/account/google-login', ['controller' => 'Account', 'action' => 'googlelogin'], ['_name' => 'account-google-login']);
$routes->connect('/oauth2callback', ['controller' => 'Account', 'action' => 'confirmlogin'], ['_name' => 'account-google-redirect-url']);
Google Login Aktionscode:
/**
* Gmail login method
*/
public function googlelogin()
{
$client = new Google_Client();
$client->setClientId(Configure::read('Google.googleClientID'));
$client->setClientSecret(Configure::read('Google.googleClientSecret'));
$client->setRedirectUri(Configure::read('Google.googleRedirectUrl'));
$client->se
tScopes([
"https://www.googleapis.com/auth/userinfo.profile",
'https://www.googleapis.com/auth/userinfo.email'
]);
$url = $client->createAuthUrl();
$this->redirect($url);
}
Google URL-Aktion
/**umleiten* Gmail Auth Umleitung Aktion * @return Typ gmail Auth Daten */
public function confirmlogin()
{
$client = new Google_Client();
$client->setClientId(Configure::read('Google.googleClientID'));
$client->setClientSecret(Configure::read('Google.googleClientSecret'));
$client->setRedirectUri(Configure::read('Google.googleRedirectUrl'));
$client->setScopes([
"https://www.googleapis.com/auth/userinfo.profile",
'https://www.googleapis.com/auth/userinfo.email'
]);
$client->setApprovalPrompt('auto');
$usersTable = TableRegistry::get('Users');
if (isset($this->request->query['code'])) {
$client->authenticate($this->request->query['code']);
$this->request->Session()->write('access_token', $client->getAccessToken());
}
if ($this->request->Session()->check('access_token') && ($this->request->Session()->read('access_token'))) {
$client->setAccessToken($this->request->Session()->read('access_token'));
}
if ($client->getAccessToken()) {
$this->request->Session()->write('access_token', $client->getAccessToken());
$oauth2 = new Google_Service_Oauth2($client);
$user = $oauth2->userinfo->get();
try {
if (!empty($user)) {
if ((preg_match("/(@example\.com)$/", $user['email'])) || (preg_match("/(@example\.in)$/", $user['email']))) {
$result = $usersTable->find('all')
->where(['email' => $user['email']])
->first();
if (!empty($result)) {
$this->AccessControl->setUser($result->toArray(), false);
$this->Flash->set(__('You have successfuly logged in.'), ['element' => 'success']);
$this->redirect(['_name' => 'dashboard']);
} else {
$data = [];
$data['email'] = $user['email'];
$data['first_name'] = $user['givenName'];
$data['last_name'] = $user['familyName'];
$data['socialId'] = $user['id'];
$data['role_id'] = Configure::read('Role.loginWithGmailUserRole');
//$data matches my Users table
$entity = $usersTable->newEntity($data);
if ($usersTable->save($entity)) {
$data['id'] = $entity->id;
$this->AccessControl->setUser($data, false);
$this->Flash->set(__('You have successfuly logged in.'), ['element' => 'success']);
$this->redirect(['_name' => 'dashboard']);
} else {
$this->Flash->error(__('Invalid login.'));
//redirect to login action
$this->redirect(['_name' => 'account-login']);
}
}
} else {
$this->Flash->error(__('Your email is invalid for this application.'));
//redirect to login action
$this->redirect(['_name' => 'account-login']);
}
} else {
$this->Flash->error(__('Gmail infos not found.'));
//redirect to login action
return $this->redirect(['_name' => 'account-login']);
}
} catch (\Exception $e) {
$this->Flash->error(__('Gmail error.'));
return $this->redirect(['_name' => 'account-login']);
}
}
}
Bitte schauen Sie auf diesen Link https://github.com/hareshpatel1990/cakephp3restapi hoffen, das wird Ihnen helfen ... –
eine ordnungsgemäße Rest API verwendet keine Sitzung, daher müssen Sie mit jeder Anfrage eine Art Authentifizierung senden, JWT ist der beste Weg, dies zu erreichen! – Voycey
@HareshKumar Das ist aus dem gleichen Tutorial, mit dem ich verlinkt habe, und trotzdem, ich folgte ihm genau und es generiert die Token, aber die Authentifizierung schlägt immer fehl, wenn ich den Header 'Authorization: Bearer my-long-token-here' habe. – tyjkenn