Drupal7 программно регистрирует пользователя только с именем пользователя - PullRequest
0 голосов
/ 25 декабря 2018

Я хотел бы войти в систему, передав URL-адрес, например "http://example.com? Name = admin " (после которого я буду шифровать). Если пользователь существует, войдите напрямую, если нет, направьтеto / user page

Я ищу некоторые решения, но почти все из них должны предоставить пароль для аутентификации.

Существует API: user_login_finalize (), но не знаю, как его использовать

Кто-нибудь может мне помочь, как этого добиться?

Большое спасибо!

$name = urldecode($_GET["name"]);

$sso = user_load_by_name($name);
if(!$sso){
// User doesn't exist
echo 'Welcome, visitor!';
} 
else {
// User exists
echo 'Welcome!'.$name;
}

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Я использую это

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$sso = urldecode($_GET["name"]);
$user = user_load_by_name($sso);

if(!$user){
    drupal_goto('user/login');
} 
else {
    $user_id = $user->uid;
    user_login_finalize($user_id);
    drupal_goto('<front>');
}
0 голосов
/ 30 декабря 2018

Это так же просто, как:

global $user; $user = $sso; user_login_finalize($user->uid);

в вашем блоке else.

Однако, лучше переосмыслить вопросы безопасности такого сценария ...

0 голосов
/ 25 декабря 2018

Обычно это выглядит так:

$uid = user_authenticate($username, $password);
$account = array('uid' => $uid);
user_login_submit(array(), $account); 

Но в вашем случае, поскольку у вас нет пароля, должно быть (я не пробовал) как:

$user = user_load_by_name($usernamename);
$account = array('uid' => $user->uid);
user_login_submit(array(), $account); 

Также проверьте эти страницы:

https://www.drupal.org/project/login_activity/issues/2066899

https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_load_by_name/7.x

И будьте осторожны, чтобы не сделать дыру в безопасности вашего сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...