Drupal 8)でプログラムでユーザーにログインしようとしています。ここに私のコードがあります:
if(isset($uid)) {
$user = User::load($uid);
user_login_finalize($user);
$user_destination = \Drupal::destination()->get();
$response = new RedirectResponse($user_destination);
$response->send();
exit(0);
}
ウォッチドッグで「セッションが開かれました...」というメッセージが表示されます。しかし、ユーザーはログインしていません。誰かが私のコードのどこに問題があるのか教えてもらえますか?
あなたのコードは大丈夫です。
次の名前空間を追加するだけです。
use Drupal\user\Entity\User;
use Symfony\Component\HttpFoundation\RedirectResponse;
コードで削除:
user_login_finalize($user);
そして
exit(0);
完全な例は次のようになります。
use Drupal\user\Entity\User;
use Symfony\Component\HttpFoundation\RedirectResponse;
$uid=1;
if(isset($uid)) {
$user = User::load($uid);
user_login_finalize($user);
$user_destination = \Drupal::destination()->get();
$response = new RedirectResponse($user_destination);
$response->send();
ksm($user);
}
あなたがインストールした場合
開発する
モジュールと
キント
サブモジュール、関数を使用できます
ksm()
、変数の情報を表示します。
これは、新しいファイルに貼り付けて実行できる完全なコードです
<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
$autoloader = require_once 'autoload.php';
$kernel = new DrupalKernel('prod', $autoloader);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
// ID of the user.
// REPLACE WITH WHATEVER ID YOU WANT TO LOGIN AS;
$uid = 100;
$user = Drupal\user\Entity\User::load($uid);
// This is required to call user_login_finalize here.
$kernel->prepareLegacyRequest($request);
user_login_finalize($user);
$response->send();
$kernel->terminate($request, $response);
参照: http://www.drupal8.ovh/en/tutoriels/76/login-programmatically-as-a-user