增加从其它数据库登录的功能
This commit is contained in:
parent
afa4d02adc
commit
b6eabda80b
|
@ -134,17 +134,12 @@ class Account implements EventManagerAwareInterface
|
|||
$results = $this->getEventManager()->trigger('login.checkParam', $this, compact('data'));
|
||||
$cache_data = $results->last();
|
||||
|
||||
if($cache_data !== true)
|
||||
if(isset($cache_data['error']) && !empty($cache_data['error']))
|
||||
{
|
||||
if(!is_array($cache_data))
|
||||
{
|
||||
return array('error'=>$cache_data);
|
||||
}else{
|
||||
return $cache_data;
|
||||
}
|
||||
return array('error'=>$cache_data);
|
||||
}
|
||||
|
||||
$state = $this->storeLogin($data);
|
||||
$state = $this->storeLogin($cache_data);
|
||||
|
||||
if(isset($state['success']))
|
||||
{
|
||||
|
@ -161,42 +156,12 @@ class Account implements EventManagerAwareInterface
|
|||
$auth = new AuthenticationService();
|
||||
$auth->setStorage(new SessionStorage($this->config->session_namespace));
|
||||
|
||||
new Zend_Db($dbAdapter);
|
||||
|
||||
$authAdapter = new \Zend\Authentication\Adapter\DbTable(
|
||||
$dbAdapter,
|
||||
$this->conf->table->member,
|
||||
$this->conf->field->uname,
|
||||
$this->conf->field->pwd
|
||||
);
|
||||
|
||||
if($md5 === true)
|
||||
{
|
||||
$password = md5($data[$this->conf->field->pwd]);
|
||||
}else{
|
||||
$password = $data[$this->conf->field->pwd];
|
||||
}
|
||||
|
||||
$authAdapter
|
||||
->setIdentity($data[$this->conf->field->uname])
|
||||
->setCredential($password)
|
||||
;
|
||||
|
||||
$result = $authAdapter->authenticate();
|
||||
|
||||
$user = $authAdapter->getResultRowObject(null,array($this->conf->field->pwd));
|
||||
|
||||
if(!$result->isValid())
|
||||
{
|
||||
return array("error"=>"用户信息验证失败");
|
||||
}
|
||||
|
||||
$email = $user->email;
|
||||
$email = $data['email'];
|
||||
$results = $this->getEventManager()->trigger('login.success.createAvatar', $this, compact('email'));
|
||||
$user->avatar = $results->last();
|
||||
$auth->getStorage()->write($user);
|
||||
$data['avatar'] = $results->last();
|
||||
$auth->getStorage()->write($data);
|
||||
|
||||
$id = $user->id;
|
||||
$id = $data['id'];
|
||||
$results = $this->getEventManager()->trigger('login.success.updateStatus', $this, compact('id'));
|
||||
|
||||
return array('success'=>1);
|
||||
|
|
|
@ -14,10 +14,19 @@ class LoginHandle implements \Sookon\User\Event\LoginEvent
|
|||
private $config; //全局配置
|
||||
private $conf;
|
||||
|
||||
public $dsn;
|
||||
|
||||
private $last_login_data;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->db = new Db();
|
||||
$this->conf = Config::get();
|
||||
|
||||
$this->dsn = array(
|
||||
array('host'=>'localhost','db'=>'','user'=>'','pwd'=>''),
|
||||
array('host'=>'localhost','db'=>'','user'=>'','pwd'=>''),
|
||||
);
|
||||
}
|
||||
|
||||
public function checkParam(EventInterface $e){
|
||||
|
@ -47,28 +56,88 @@ class LoginHandle implements \Sookon\User\Event\LoginEvent
|
|||
return array('error'=>"请输入密码",'place'=>'password');
|
||||
}
|
||||
|
||||
$sql = "SELECT id,{$this->conf->field->pwd} FROM {$this->conf->table->member} WHERE {$this->conf->field->uname}=?";
|
||||
$sth = $this->db->prepare($sql);
|
||||
$rs = $sth->execute(array($data[$this->conf->field->uname]));
|
||||
$row = $sth->fetch();
|
||||
|
||||
if(isset($row['id']) && !empty($row['id']))
|
||||
$status = $this->checkLogin($data[$this->conf->field->uname],$data[$this->conf->field->pwd]);
|
||||
if($status !== true)
|
||||
{
|
||||
if(strlen($row[$this->conf->field->pwd]) !== 32)
|
||||
{
|
||||
return array('error'=>"您的密码或因安全猿因或其他问题已经被重置,请先<a href='/account/forgotpassword'>重置密码</a>再登陆",'place'=>'password');
|
||||
}
|
||||
if($row[$this->conf->field->pwd] !== md5($data[$this->conf->field->pwd]))
|
||||
{
|
||||
return array('error'=>"密码错误",'place'=>'password');
|
||||
}
|
||||
return true;
|
||||
}else{
|
||||
return array('error'=>"用户不存在",'place'=>'username');
|
||||
return $status;
|
||||
}
|
||||
|
||||
else{
|
||||
return $this->last_login_data;
|
||||
}
|
||||
|
||||
}//checkParam
|
||||
|
||||
//检查登录信息是否正确
|
||||
public function checkLogin($username,$password)
|
||||
{
|
||||
|
||||
$row = $this->checkUser($username);
|
||||
|
||||
$uname_avalible = false;
|
||||
|
||||
if( isset($row['error']) && !empty($row['error']) )
|
||||
{
|
||||
if(count($this->dsn) > 0)
|
||||
{
|
||||
foreach($this->dsn as $k=>$v)
|
||||
{
|
||||
$db = new Db($v);
|
||||
|
||||
$row = $this->checkUser($username,$db);
|
||||
|
||||
if( !isset($row['error']) && empty($row['error']) )
|
||||
{
|
||||
$uname_avalible = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$uname_avalible)
|
||||
return $row;
|
||||
else
|
||||
$this->last_login_data = $row;
|
||||
|
||||
return $this->checkPwd($row,$password);
|
||||
}
|
||||
|
||||
//获取数据
|
||||
public function checkUser($username,$db = NULL,$memberTable = "")
|
||||
{
|
||||
if(empty($db))
|
||||
$db = $this->db;
|
||||
|
||||
if(empty($memberTable))
|
||||
$memberTable = $this->conf->table->member;
|
||||
$sql = "SELECT id,{$this->conf->field->pwd} FROM $memberTable WHERE {$this->conf->field->uname}=?";
|
||||
$sth = $db->prepare($sql);
|
||||
$rs = $sth->execute(array($username));
|
||||
$row = $sth->fetch();
|
||||
|
||||
if(!isset($row['id']) || empty($row['id']))
|
||||
{
|
||||
return array('error'=>"用户不存在",'place'=>'username');
|
||||
}
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
||||
//检查数据
|
||||
public function checkPwd($row,$password)
|
||||
{
|
||||
if(strlen($row[$this->conf->field->pwd]) !== 32)
|
||||
{
|
||||
return array('error'=>"您的密码或因安全原因和其他问题已经被重置,请先<a href='/account/forgotpassword'>重置密码</a>再登陆",'place'=>'password');
|
||||
}
|
||||
if($row[$this->conf->field->pwd] !== md5($password))
|
||||
{
|
||||
return array('error'=>"密码错误",'place'=>'password');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function updateStatus(EventInterface $e){
|
||||
|
||||
$id = (int)$e->getParam('id');
|
||||
|
|
Loading…
Reference in New Issue