Skip to content
关注公众号,获取新课通知
【重要通知】uniapp实战社区交友交流群更换为:602180461,靓仔/靓女可以重新申请加入哦~

手机号登录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,
    ...
];