On this page
手机号登录api
controller层:application\api\controller\v1\User.php
php
// 手机号码登录
public function phoneLogin(){
// 验证登录信息
(new UserValidate())->goCheck('phonelogin');
// 手机登录
$token = (new UserModel())->phoneLogin();
return self::showResCode('登录成功',['token'=>$token]);
}
route层:route\route.php
php
// 不需要验证token
Route::group('api/:version/',function(){
...
// 手机登录
Route::post('user/phonelogin','api/:version.User/phoneLogin');
...
});
validate层:application\common\validate\UserValidate.php
php
protected $rule = [
...
'phone'=>'require|mobile',
'code'=>'require|number|length:4|isPefectCode',
...
];
protected $scene = [
...
'phonelogin'=>['phone','code']
...
];
BaseValidate:application\common\validate\BaseValidate.php
php
...
// 验证码验证
protected function isPefectCode($value, $rule='', $data='', $field='')
{
// 验证码不存在
$beforeCode = cache($data['phone']);
if(!$beforeCode) return "请重新获取验证码";
// 验证验证码
if($value != $beforeCode) return "验证码错误";
return true;
}
...
model层:application\common\model\User.php
php
// 自动写入时间
protected $autoWriteTimestamp = true;
...
// 绑定用户信息表
public function userinfo(){
return $this->hasOne('Userinfo');
}
...
// 判断用户是否存在
public function isExist($arr=[]){
if(!is_array($arr)) return false;
if (array_key_exists('phone',$arr)) { // 手机号码
return $this->where('phone',$arr['phone'])->find();
}
return false;
}
...
// 手机登录
public function phoneLogin(){
// 获取所有参数
$param = request()->param();
// 验证用户是否存在
$user = $this->isExist(['phone'=>$param['phone']]);
// 用户不存在,直接注册
if(!$user){
// 用户主表
$user = self::create([
'username'=>$param['phone'],
'phone'=>$param['phone'],
// 'password'=>password_hash($param['phone'],PASSWORD_DEFAULT)
]);
// 在用户信息表创建对应的记录(用户存放用户其他信息)
$user->userinfo()->create([ 'user_id'=>$user->id ]);
return $this->CreateSaveToken($user->toArray());
}
// 用户是否被禁用
$this->checkStatus($user->toArray());
// 登录成功,返回token
return $this->CreateSaveToken($user->toArray());
}
...
// 生成并保存token
public function CreateSaveToken($arr=[]){
// 生成token
$token = sha1(md5(uniqid(md5(microtime(true)),true)));
$arr['token'] = $token;
// 登录过期时间
$expire =array_key_exists('expires_in',$arr) ? $arr['expires_in'] : config('api.token_expire');
// 保存到缓存中
if (!Cache::set($token,$arr,$expire)) throw new BaseException();
// 返回token
return $token;
}
...
// 用户是否被禁用
public function checkStatus($arr){
$status = $arr['status'];
if($status==0) throw new BaseException(['code'=>200,'msg'=>'该用户已被禁用','errorCode'=>20001]);
return $arr;
}
配置文件(config/api.php)
php
return [
...
// token过期时间
'token_expire'=>0,
...
];