register.json não efetua login no usuário nem retorna a sessão / token / senha do usuário


9

Tentei muitas variações para listar aqui, mas o ponto básico é que não consigo logar o usuário imediatamente após o registro pelos Serviços. Tentei uma nova instalação do Drupal 7.33 apenas com o Services 7.x.3.11 ativado e as configurações de recursos padrão fornecidas pelo drupalgap 7.x.1.9

Quando me registro usando a interface do Drupal, o usuário é criado, a sessão é aberta e eu chego na minha página de perfil.

vs.

Quando ligo para o terminal de serviços /services/user/register.json, o Drupal cria a conta, mas a sessão não persiste. Veja minhas imagens abaixo.

insira a descrição da imagem aqui

Como posso A. obter a sessão para persistir para chamadas de recursos de serviço subseqüentes OU B. ligar para adicionar a senha do usuário ou gerada automaticamente de volta à resposta json para que eu possa reenviar programaticamente o formulário /login.json do lado do cliente (que persiste)?

Esta pergunta como o usuário global $ pode ser diferente entre a interface Drupal e o módulo Serviços? descreve meu mesmo problema usando o LoginToboggan.

Na minha captura de tela, você verá uma linha de depuração chamada "login debug". Vem da linha 333 de "/sites/all/modules/logintoboggan/logintoboggan.module", onde eu tentei tudo isso sem sucesso ...

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, é contra os termos solicitar ajuda paga aqui?
COMA

É @EliATaylor, eu estava apenas deixando um comentário. Estamos interessados ​​apenas na pergunta e na resposta aqui , qualquer outra coisa (solicitar trabalho remunerado, solicitar links para tutoriais ou basicamente a maioria das outras coisas que acontecem fora do local) é uma distração daquilo e de algo contra o qual nos protegemos. Tudo o que realmente queremos é uma boa pergunta (que nós temos aqui, incrível) e uma boa resposta (que espero que você consiga) #
Clive

você me ajudou muitas vezes a reclamar aqui, mas caramba @clive. eu poderia colocar essa conversa offline e não bagunçar essa tela, exceto quando a resolvermos. Também aqui, eu nem tenho reputação de usar o recurso de bate-papo. Posso trocar alguns do StackOverflow? Nem vincular meu link do github ao repositório?
EAT

11
Nem mesmo :) Simplesmente não somos um fórum de suporte, e qualquer coisa que não seja "pergunta" ou "resposta" vai contra a nossa missão de criar um repositório de conhecimento de alta qualidade sobre o Drupal. Tudo o que for necessário para responder à pergunta precisa estar na própria pergunta, porque, se não for, a pergunta se tornará inútil assim que os links externos forem desativados ou o problema for resolvido. As regras podem parecer arbitrárias ou até severas, mas foram comprovadas necessárias pelo modelo do Stack Exchange como um todo há vários anos. Se você se lembra que é apenas Q + A aqui, nunca haverá um problema
Clive

Com relação ao seu representante para conversar - você está muito próximo disso agora, e suspeito que essa pergunta atraia alguns votos positivos, como está bem escrito. Eles virão com o tempo. Essa é a outra coisa que devo mencionar, não temos noção do tempo aqui como tal - preferimos que as perguntas levem mais tempo para serem respondidas, mas de uma maneira com maior qualidade do que as respostas rápidas e básicas. Não que incentivemos as pessoas a serem lentas ou algo assim, mas se você precisar de algo realizado de maneira sensível ao tempo, não é uma boa ideia apostar no que está acontecendo aqui, já que não estamos focados nisso
Clive

Respostas:


1

Não tenho certeza se você precisa de uma resposta neste momento (ou se é mesmo uma), mas parece que você está "Requer verificação de e-mail quando um visitante cria uma conta" ativada?

Na sua imagem, na segunda janela (onde você vê a mensagem de drupal_set_message ()), indica que um email foi enviado e você precisará seguir as instruções para obter a mensagem completa.

Para desativar isso, navegue para / admin / config / people / accounts e desmarque a opção Exigir verificação por email quando um visitante criar uma conta.

Se você olhar para a tabela de usuários no banco de dados, a coluna de status deverá mostrar 1 para ativado, 0 para desativado (o que significa que ele não clicou no link no email).

Espero que ajude!


Não funcionou, mesmo se você fizer usuários registrados ativo por padrão
Mohammed Gomma

0

Está funcionando bem para mim, você pode usar o seguinte código

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

passar a ID e a senha do email do usuário, ele retornará todo o valor necessário, como ID da sessão, nome da sessão, token, uid do usuário


Ele cria novas sessões, mas nenhum registro na tabela sessões inserido, por isso ainda não sessão válido
Mohammed Gomma
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.