我正在尝试在我的Drupal站点根目录中编写一个自定义php脚本,检查用户是否已登录。要检查这一点,我导入bootstrap.inc。但是,当我这样做时,它会抛出这个错误
这是我网站root中的php脚本代码:
<?php
require_once './core/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
global $user;
var_dump($user->uid);
?>
任何人都有解决方案吗?
答案 0 :(得分:0)
要引导Drupal 8,您需要不同的代码。 Drupal 8没有任何drupal_bootstrap()
函数,因此您使用的代码会抛出PHP错误。
您可以使用authorize.php作为指导来编写自己的脚本。
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$autoloader = (require_once 'autoload.php');
try {
$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
$kernel->prepareLegacyRequest($request);
} catch (HttpExceptionInterface $e) {
$response = new Response('', $e->getStatusCode());
$response
->prepare($request)
->send();
exit;
}
\Drupal::moduleHandler()
->addModule('system', 'core/modules/system');
\Drupal::moduleHandler()
->addModule('user', 'core/modules/user');
\Drupal::moduleHandler()
->load('system');
\Drupal::moduleHandler()
->load('user');
$account = \Drupal::service('authentication')
->authenticate($request);
if ($account) {
\Drupal::currentUser()
->setAccount($account);
if (\Drupal::currentUser()->isAuthenticated() {
// The user is logged-in.
}
}
答案 1 :(得分:0)
我通过使用完全不同的方法来解决这个问题。我写了一个模块,在用户登录drupal时设置一个cookie(我使用hook_user_login)。当用户注销时,我删除了该cookie(我使用了hook_user_logout)。这是我的test.module的代码:
/**
* @param $account
*/
function intersoc_content_user_login($account)
{
setcookie("user", "loggedin", time() + (86400 * 30),"/");
}
/**
* @param $account
*/
function intersoc_content_user_logout($account)
{
if (isset($_COOKIE['user']))
{
unset($_COOKIE['user']);
setcookie('user', '', time() - 3600, '/'); //Clearing cookie
}
}
然后在我的站点根目录中的自定义脚本中,检查cookie是否已设置。当cookie存在时=&gt;用户已登录。如果cookie不存在,则用户未登录。下面的isLoggedIn()函数:
/**
* @return bool which indicates if the user is logged in or not
*/
private function isLoggedIn()
{
if(isset($_COOKIE["user"]))
{
return TRUE;
}
else
{
return FALSE;
}
}
这不是最美丽的解决方案,但它有效!