web-dev-qa-db-ja.com

プログラムによるユーザーログインが機能しない

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);
}

ウォッチドッグで「セッションが開かれました...」というメッセージが表示されます。しかし、ユーザーはログインしていません。誰かが私のコードのどこに問題があるのか​​教えてもらえますか?

4

あなたのコードは大丈夫です。

次の名前空間を追加するだけです。

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

0
anoopjohn