132 lines
3.7 KiB
PHP
132 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Api\Controllers;
|
|
|
|
use App\User;
|
|
use Auth;
|
|
use Illuminate\Http\Request;
|
|
use RuLong\Sms\Models\Sms as SmsModel;
|
|
use Validator;
|
|
class AuthController extends Controller
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth.api', ['except' => ['login','smsCode']]);
|
|
}
|
|
|
|
/**
|
|
* 用户登录
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function login(Request $request)
|
|
{
|
|
|
|
// $info = $request->userInfo;
|
|
$code = $request->code;
|
|
|
|
$app = app('wechat.mini_program');
|
|
|
|
$jscode = $app->auth->session($code);
|
|
$user = User::where('unionid', $jscode->unionid)->first();
|
|
$token = Auth::guard('api')->login($user);
|
|
return $this->success([
|
|
'access_token' => $token,
|
|
'access_type' => 'Bearer',
|
|
'expires_in' => Auth::guard('api')->factory()->getTTL() * 60,
|
|
'userInfo' => [
|
|
'uid' => $user->id ?? '',
|
|
'avatar' => $user->info->headimgurl ?? '',
|
|
'nickname' => $user->info->nickname ?? '',
|
|
'openid' => $jscode->openid ?? ''
|
|
|
|
]
|
|
]);
|
|
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* 刷新TOKEN
|
|
* @return [type] [description]
|
|
*/
|
|
public function refresh()
|
|
{
|
|
return $this->success([
|
|
'access_token' => Auth::guard('api')->refresh(true),
|
|
'access_type' => 'Bearer',
|
|
'expires_in' => Auth::guard('api')->factory()->getTTL() * 60,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 退出登录
|
|
* @return [type] [description]
|
|
*/
|
|
public function logout()
|
|
{
|
|
Auth::guard('api')->logout(true);
|
|
return $this->message('退出登录成功');
|
|
}
|
|
|
|
|
|
/**
|
|
* 发送验证码
|
|
* @return
|
|
*/
|
|
public function smsCode(Request $request)
|
|
{
|
|
$channel = $request->channel;
|
|
$mobile = $request->mobile;
|
|
switch ($channel) {
|
|
case 'BYCODE':
|
|
case 'FORGOT':
|
|
// 验证码登录,必须要手机号存在才行
|
|
$validator = Validator::make($request->all(), [
|
|
'mobile' => 'required|mobile|exists:users',
|
|
], [
|
|
'mobile.required' => '手机号码必须填写',
|
|
'mobile.mobile' => '手机号码格式不正确',
|
|
'mobile.exists' => '手机号码不存在',
|
|
]);
|
|
break;
|
|
case 'BIND':
|
|
// 绑定手机号,要不存在才可以
|
|
$validator = Validator::make($request->all(), [
|
|
'mobile' => 'required|mobile|unique:users',
|
|
], [
|
|
'mobile.required' => '手机号码必须填写',
|
|
'mobile.mobile' => '手机号码格式不正确',
|
|
'mobile.unique' => '手机号码已经绑定',
|
|
]);
|
|
break;
|
|
default:
|
|
$validator = Validator::make($request->all(), [
|
|
'mobile' => 'required|mobile',
|
|
], [
|
|
'mobile.required' => '手机号码必须填写',
|
|
'mobile.mobile' => '手机号码格式不正确',
|
|
]);
|
|
break;
|
|
}
|
|
|
|
if ($validator->fails()) {
|
|
return $this->failed($validator->errors()->first());
|
|
}
|
|
|
|
$res = SmsModel::verify_code($request->mobile);
|
|
if ($res !== true) {
|
|
return $this->failed($res);
|
|
}
|
|
|
|
try {
|
|
\Sms::send($mobile, $channel);
|
|
return $this->success('验证码发送成功');
|
|
} catch (\Exception $e) {
|
|
return $this->failed($e->getMessage());
|
|
}
|
|
}
|
|
}
|