
環境
- cakephp 3.6
- php 7.2.5
やりたいこと
CakephpのAuthComponentを利用して、Auth0から返ってきたユーザ情報を認証し、
ログインを行いたい。
やりたいこと詳細
CakephpのAuthComponentを利用し、
ユーザのログインをさせたいと考えていますが、シングルサインオンの概念を利用したく、
ユーザ情報をサードパーティのAuth0にもたせています。
この時、登録のフローとして、
【自分のWebサイト】 ─Auth0のAPI→ 【Auth0】 ―Auth0からのレスポンス→ 【自分のWebサイト】
と通知が来て、
ログインの際も、
【自分のWebサイト】 ─Auth0のAPI→ 【Auth0】 ―Auth0からのレスポンス→ 【自分のWebサイト】
というフローでユーザ情報が返ってきます。
なので、POST通信はなく、この情報をもとにCakephp側でログイン処理をさせたいのですが、
出てきたそれっぽい記事は、Cakephp2のもので、
やってみると、
Deprecated: Setting data as a property will be removed in 4.0.0. Use withData() instead.
と表示されました。
ひとまず、withData
を使ってみようと、サンプル的に
php
1public function index() 2{ 3 $this->request = $this->request->withData('username', 'mymail@example.com'); 4 $this->request = $this->request->withData('password', 'mypassword'); 5 6 $user = $this->Auth->identify(); 7 var_dump($user); 8 die; 9}
とやってみましたが、false
が返ってきます。
もちろんDBは作成し、データはインサートしております。
(こちらを参考に作っています。)
sql
1CREATE TABLE users ( 2 id SERIAL PRIMARY KEY, 3 email VARCHAR(255) NOT NULL, 4 password VARCHAR(255) NOT NULL, 5 role VARCHAR(20) NOT NULL, 6 created TIMESTAMP NOT NULL DEFAULT NOW(), 7 modified TIMESTAMP 8);
sql
1INSERT INTO users (id, email, password, role, created, modified) VALUES (1, 'mymail@example.com', 'mypassword', 'normal', null, null);
なお、AppControllerは、
php
1$this->loadComponent('Auth', [ 2 'authorize' => ['Controller'], 3 'authenticate' => ['Form' => ['finder' => 'auth', 'username' => 'email', 'password' => 'password']]], 4 'loginRedirect' => ['controller' => 'Users', 'action' => 'index'], 5 'logoutRedirect' => ['controller' => 'Users', 'action' => 'login'], 6 'loginAction' => '/login', 7 'authError' => 'Login required' 8]);
UsersTable.php
php
1 public function findAuth(Query $query, array $options) 2 { 3 $query 4 ->select(['id', 'username', 'password']) 5 ->where(['Users.username' => $options['username']]); 6 7 var_dump($query->toArray()); 8 9 return $query; 10 }
としています。
この様に、POST通信やBASIC認証などがない場合、
どのようにしてCakephpの認証を利用するのでしょうか。
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
追記
php
1$this->Auth->setUser(['id' => 1, 'username' => 'mymail@example.com', 'password' => 'mypassword', 'role' => 'normal']); 2 3$user = $this->Auth->identify(); 4var_dump($user); 5die;
としてもまだfalse
追記2
php
1 $this->Auth->setUser(['id' => 1, 'username' => 'mymail@example.com', 'password' => 'mypassword', 'role' => 'normal']); 2 3$user = $this->Auth->user()
とすれば取れるのか……
え?でもなんで、
$user = $this->Auth->identify();
だとfalseになるん…?


回答1件
あなたの回答
tips
プレビュー