terça-feira, 27 de julho de 2010

Forçar Alteração de Senha no Moodle com Comando SQL

Na camada de persistência do Moodle, ou seja, na base de dados, há uma tabela com as definições da configuração do usuário. Trata-se da tabela mdl_ user_preferences. Essa tabela é composta por três campos:
  • userid
  • name
  • value
O primeiro campo se refere ao id do usuário na tabela mdl_user. Os dois últimos campos se referem chave e valor da configuração.

A configuração que força usuário a alterar a sua senha é: auth_forcepasswordchange=1. Assim que o usuário fizer o login, automaticamente é levado a alterar a senha. Feita a alteração a configuração será atualizada para auth_forcepasswordchange=0.
Ao fazer o cadastro do usuário via comando SQL, para forçá-lo a alterar a senha no primeiro login, é necessário executar o comando abaixo.

Comando SQL que força alteração de senha:
INSERT INTO mdl_user_preferences(userid,name,value) VALUES(10,'auth_forcepasswordchange', '1')

Nesse exemplo coloquei 10 para userid (id do usuário). Para esse código funcionar, substitua esse valor pelo id verdadeiro do usuário.

3 comentários:

  1. Poxa!! Valeu o post. Me ajudou muito.
    []s

    ResponderExcluir
  2. Preciso alterar a senha de todos os usuários, como faço isso em um loop?

    ResponderExcluir
  3. Para alterar a senha de todos os usuários, siga os seguintes passos:

    1- Altere a senha de todos os usuários para 123 com o seguinte comando:

    UPDATE mdl_user SET password=MD5('123')

    2- Force todos os usuários a alterar a senha após o login. Para isso, siga os seguintes passos:

    a. Faça um loop que leia o id de cada usuário na tabela mdl_user . Execute o seguinte comando SQL:

    SELECT id FROM mdl_user

    b. Através de um script PHP, ou qualquer outra linguagem, em cada registro extraído pelo loop atualize a variável auth_forcepasswordchange com o valor 1 na tabela mdl_user_preferences. Se a variável auth_forcepasswordchange ainda não for definida, execute o SQL:

    INSERT INTO mdl_user_preferences(userid,name,value) VALUES(?,'auth_forcepasswordchange', '1')

    caso esteja definido com valor 0 (zero), atualize o valor para 1 como seguinte comando:

    UPDATE mdl_user_preferences SET value='1' WHERE userid=? AND name='auth_forcepasswordchange'

    Substitua o parâmetro ? pelo id do usuário extraído em cada loop.

    ResponderExcluir