<?php
namespace app\service\api;
use laytp\library\Str;
use laytp\library\Token;
use laytp\traits\Error;
use laytp\library\Random;
class User
{
use Error;
protected $_user = null protected $_token = null protected $_isLogin = null protected $userModel = null protected $allowFields = ['id', 'email', 'nickname', 'avatar'];
protected $tokenKeepTime = 10 * 365 * 24 * 60 * 60
public function init($token)
{
if (!$token) {
$this->setError('token不能为空,请重新登录');
return false;
}
$data = Token::get($token);
if (!$data) {
$this->setError('token无效,请重新登录');
return false;
}
$userId = intval($data['user_id']);
if ($userId > 0) {
$user = \app\model\User::find($userId);
if (!$user) {
$this->setError('账号不存在,请重新登录');
return false;
}
if ($user['status'] != 1) {
$this->setError('账号被锁定,请联系管理员');
return false;
}
$this->_user = $user;
$this->_isLogin = true;
$this->_token = $token;
return true;
} else {
$this->setError('账号不存在,请重新登录');
return false;
}
}
public function emailRegLogin($params)
{
try {
$user = \app\model\User::where('email', '=', $params['email'])->find();
if (!$user) {
$data = [
'email' => $params['email'],
'password' => Str::createPassword($params['password']),
'status' => 1,
'login_time' => date('Y-m-d H:i:s'),
'login_ip' => request()->ip(),
];
$user = \app\model\User::create($data);
$this->_user = \app\model\User::find($user->id);
} else {
$this->_user = $user;
}
$this->_token = Random::uuid();
Token::set($this->_token, $user->id, $this->tokenKeepTime);
return true;
} catch (\Exception $e) {
$this->setError('操作异常');
return false;
}
}
public function logout()
{
if (!$this->_isLogin) {
$this->setError('你没有登录');
return false;
}
$this->_isLogin = false;
Token::delete($this->_token);
return true;
}
public function __get($name)
{
return $this->_user ? $this->_user->$name : null;
}
public function getUserInfo()
{
$data = $this->_user->toArray();
$allowFields = $this->getAllowFields();
$userInfo = array_intersect_key($data, array_flip($allowFields));
$userInfo = array_merge($userInfo, ['token' => $this->_token]);
return $userInfo;
}
public function getAllowFields()
{
return $this->allowFields;
}
public function getUser()
{
return $this->_user;
}
public function isLogin()
{
if ($this->_isLogin) {
return true;
}
return false;
}
public function getToken()
{
return $this->_token;
}
}