register.json不会登录用户或返回用户的会话/令牌/密码


9

我尝试了太多的变化以在此处列出,但基本要点是我无法通过服务注册后立即使用户登录。我尝试了全新的Drupal 7.33安装,仅启用了Services 7.x.3.11,并且drupalgap 7.x.1.9提供了默认资源设置。

当我使用Drupal界面注册时,创建了用户,打开了会话,并登录了我的个人资料页面。

当我调用Services端点时/services/user/register.json,Drupal创建了帐户,但会话不会持久。请参阅下面的屏幕截图。

在此处输入图片说明

我该如何A.让该会话保留下来以进行后续的Service资源调用,或者B.挂钩以将用户的密码或自动生成的密码重新添加回json响应中,这样我就可以以编程方式重新提交客户端的/login.json表单(仍然存在)?

这个问题是全局的$ user在Drupal接口和Services模块之间有什么区别?使用LoginToboggan描述了我同样的问题。

在我的屏幕快照中,您将看到一个名为“ login debug”的调试行。它来自“ /sites/all/modules/logintoboggan/logintoboggan.module”的第333行,在这里我尝试了所有这些都无济于事...

function logintoboggan_process_login($account, &$edit, $redirect = array()){
  global $user;

  $user = user_load($account->uid);

//watchdog('login debug', json_encode($account)); 
watchdog('login debug', json_encode($edit));

  //user_login_submit(array(), array('uid' => $account->uid));
  user_login_finalize($edit);

//  $user = user_load($account->uid);
//  $user->token = drupal_get_token('services'); // WE HAVE A TOKEN ALTHOUGH I DOUBT THIS WOULD WORK IN TERMS OF SESSION PERSISTANCE
//  user_login_finalize($edit);
//  module_invoke_all('hook_user_login');
//  module_invoke_all('tripchi_user_login');
//  module_invoke_all('logintoboggan_user_login');

@Clive,在这里征求付费帮助是否违反条款?
EAT 2014年

是@EliATaylor,我只是发表评论。我们只对这里的问题和答案感兴趣,其他任何事情(请求付费工作,寻求教程的链接,或者基本上是场外发生的大多数其他事情)都使人分心,这是我们应避免的事情。我们真正想要的只是一个好问题(我们已经到了这里,很棒)和一个很好的答案(希望您会得到)
Clive

您已经帮助我太多次了,在这里抱怨不了,但是天哪@clive。我可以使该对话脱机,并且不会使该屏幕混乱,除非我们解决了该问题。同样在这里,我什至没有使用聊天功能的声誉。我可以从StackOverflow交易吗?甚至没有链接我的github链接到仓库?
EAT 2014年

1
甚至没有:)很简单,我们不是一个支持论坛,任何不是“问题”或“答案”的东西都违背了我们创建高质量Drupal知识库的使命。回答问题所需的任何内容都必须存在于问题本身中,因为如果不是,则一旦异地链接失效或问题已解决,问题就变得毫无用处。这些规则似乎是任意的,甚至是苛刻的,但是多年来,Stack Exchange模型已证明它们是必需的。如果你还记得它只是 Q +一这里,再也不会有一个问题
克莱夫

关于您的聊天代表-您现在已经很接近了,我怀疑这个问题写得很好会吸引一些投票。他们会随着时间而来。这是我要提及的另一件事,我们在这里没有时间感-我们宁愿问题花更长的时间回答,但要比快速而基本的回答质量更高。这并不是说我们鼓励人们要慢之类的东西,但如果你需要的东西在时间敏感的方式来完成这不是一个好主意来规避对发生在这里,因为我们没有专注于它的赌注
克莱夫

Answers:


1

不知道此时是否需要答案(或者甚至是答案),但是好像您已打开“访问者创建帐户时要求电子邮件验证”?

在您的图像中的第二个窗口(您在其中看到来自drupal_set_message()的消息)中,该消息说已发送了一封电子邮件,您需要按照说明进行操作以获取完整的消息。

要关闭此功能,请导航到/ admin / config / people / accounts,然后取消选中访问者创建帐户时要求电子邮件验证。

如果您查看数据库中的用户表,则状态列应显示1表示启用,0表示禁用(这表示他没有单击电子邮件中的链接)。

希望能帮助到你!


即使您默认使注册用户处于活动状态,它也不起作用
Mohammed Gomma 2015年

0

对我来说很好,您可以使用以下代码

global $user;
$username=$data['email'];
$password=$data['pass'];
if ($user->uid) {
    // user is already logged in
    return services_error(t('Already logged in as @user.', array('@user' => $user->name)), 406);
}

// Check if account is active.
if (user_is_blocked($username)) {
    return services_error(t('The username %name has not been activated or is blocked.', array('%name' => $username)), 403);
}

// Emulate drupal native flood control: check for flood condition.
$flood_state = array();
if (variable_get('services_flood_control_enabled', TRUE)) {
    $flood_state = _user_resource_flood_control_precheck($username);
}

// Only authenticate if a flood condition was not detected.
if (empty($flood_state['flood_control_triggered'])) {
    $uid = user_authenticate($username, $password);
}
else {
    $uid = FALSE;
}

// Emulate drupal native flood control: register flood event, and throw error
// if a flood condition was previously detected
if (variable_get('services_flood_control_enabled', TRUE)) {
    $flood_state['uid'] = $uid;
    _user_resource_flood_control_postcheck($flood_state);
}

if ($uid) {
    $user = user_load($uid);
    if ($user->uid) {
        user_login_finalize();

        $return = new stdClass();
        $return->sessid = session_id();
        $return->session_name = session_name();
        $return->token = drupal_get_token('services');
        $account = clone $user;
        services_remove_user_data($account);
        $return->user = $account;

        return $return;
    }
}
watchdog('user', 'Invalid login attempt for %username.', array('%username' => $username));
return services_error(t('Wrong username or password.'), 401);

传递用户的电子邮件ID和密码,然后它将返回所有必需的值,例如会话ID,会话名称,令牌,用户uid


它创建新的会话,但未插入会话表中的记录,因此仍然没有有效的会话
Mohammed Gomma 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.