0

I'm using services module, but i've created my own resource 'login', I'm using $data to store username + password.

When i use postman, I put a text plain for password, and in my service code i've added the hash function (see my code please)

this is my resource declaration :

'user_connexion' => array(
  'actions'=> array(
    'login'=> array(
      'help'=> t('Permet de se connecter'),
      'file'=>array('type'=>'inc','module'=>'my_module','name'=>'my_module.resource'),
      'callback'=>'my_module_connexion_login',
      'access arguments' => array('connexion resource login'),
      'access arguments append' => FALSE,
      'args'=> array(
        array(
          'name' => 'username',
          'type' => 'string',
          'description' => 'username du client',
          'source' => array('data'=>'username'),
          'optional' => FALSE,
        ),
        array(
          'name' => 'password',
          'type' => 'string',
          'description' => 'password du client',
          'source' => array('data'=>'password'),
          'optional' => FALSE,
        ),

and this is the function callback :

function my_module_connexion_login($username, $password){
//hasher (pour le moment pour tester) password
module_load_include('inc', 'services', 'includes/password');
$password_h= user_hash_password(trim($password));
var_dump($password_h);
}

the var_dump result change every time i send a post request (example for the same password text plain i've got this) :

string(55) "$S$DV5cPYQpTqX94qlY9jiYSsCkMCE7AZldfHbXx7qm1ju1aA6AQxRv"
string(55) "$S$DMM2YDpjJ6R0q8.QxLTVjMrIw2dslnt.fBTRGUK6Q8RWEls.vEjy"..ect

this is the complete function :

function my_module_connexion_login($username, $password){
//hasher (pour le moment pour tester) password
module_load_include('inc', 'services', 'includes/password');
$password_h= user_hash_password(trim($password));
//var_dump($password_h);
$log = db_select('users','u');
$log->addfield('u','uid','id_user');
$log->addfield('u','name','username');
$log->condition('name',$username,'=');
$log->condition('pass',$password_h,'=');
$login = $log->execute();
$connexion = array();

foreach ($login as $co) {   
    $connexion [] = array(
        'uid'=>$co->id_user,
        'username'=>$co->username
        );      
}
if($connexion == null){
    $response = array(); // error, so no login
    return func_succes(3,$response);
}
else{

    $response = $connexion; //no error and login
    return func_succes(0,$response);
}
 }

If i create a valid user and i choose a password, there is no way to login with this password (using my custom resource) because my function that take text plain from postman as THE password and hash it with MY RESOURCE will not returns the same hashed password as the real drupal hashed password for the password i've created before

How to use my resource to login, with taking the username (works now) and a text password, hash it and have the same hashed password stored on users table, to be able to compare it ?

Thank you.

1 Answer 1

0

I solved it by using user_authenticate($name, $password) (see https://api.drupal.org/api/drupal/modules!user!user.module/function/user_authenticate/7)

Now my code is :

function my_module_connexion_login($username, $password){

$authentification = user_authenticate($username, $password); <======

$log = db_select('users','u');
$log->addfield('u','uid','id_user');
$log->addfield('u','name','username');
$log->condition('name',$username,'=');
$login = $log->execute();
$connexion = array();

foreach ($login as $co) {   
    $connexion [] = array(
        'uid'=>$co->id_user,
        'username'=>$co->username
        );      
}
if($authentification == false){ <==================
    $response = array();
    return func_succes(3,$response);
}
else{

    $response = $connexion;
    return func_succes(0,$response);
}
}

Thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.