Reputation: 973
In my plugin I have only username or email and I have to authorize that user. I found next issue, but it didn't work for me:
class ApiPlugin extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
switch ( $params['do'] ) {
case 'login':
// Registering. Works fine.
$user = User::newFromName( 'admin' );
$user->setEmail( [email protected] );
$user->setRealName( 'admin' );
$uid = $user->idForName();
if ( $uid === 0 ) {
$user->addToDatabase();
$user->setPassword( generate_password() );
$user->saveSettings();
}
$ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
$ssu->doUpdate();
if ($user->isLoggedIn()) $user->doLogout();
//Logging in.
$id = User::idFromName('admin');
$user->setID($id);
$user->loadFromId();
$user->setToken();
$user->saveSettings();
wfSetupSession();
$user->setCookies();
break;
}
}
}
Also, another issue was getting password hash straight from DB, but it is barbarism...
Thanks in advance!
Upvotes: 3
Views: 488
Reputation: 973
After few days I tried to separate code and... profit!
class ApiPlugin extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
switch ( $params['do'] ) {
case 'register':
// Registering. Works fine.
$user = User::newFromName( 'admin' );
$user->setEmail( [email protected] );
$user->setRealName( 'admin' );
$uid = $user->idForName();
if ( $uid === 0 ) {
$user->addToDatabase();
$user->setPassword( generate_password() );
$user->saveSettings();
}
$ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
$ssu->doUpdate();
case 'authorise':
if ($user->isLoggedIn()) $user->doLogout();
wfSetupSession();
//Logging in.
$id = User::idFromName('admin');
$user->setID($id);
$user->loadFromId();
$user->setToken();
$user->saveSettings();
$user->setCookies();
break;
}
}
}
Upvotes: 2