短信验证码登录
parent
b4dae3373b
commit
745ba98708
|
|
@ -5,9 +5,12 @@ namespace App\Endpoint\Api\Http\Controllers\Auth;
|
||||||
use App\Constants\Device;
|
use App\Constants\Device;
|
||||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||||
use App\Exceptions\BizException;
|
use App\Exceptions\BizException;
|
||||||
|
use App\Models\SmsCode;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\UserInfo;
|
use App\Models\UserInfo;
|
||||||
|
use App\Services\SmsCodeService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class LoginController extends Controller
|
class LoginController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -19,21 +22,29 @@ class LoginController extends Controller
|
||||||
*/
|
*/
|
||||||
public function __invoke(Request $request)
|
public function __invoke(Request $request)
|
||||||
{
|
{
|
||||||
$validated = $request->validate([
|
$request->validate([
|
||||||
'phone' => ['bail', 'required', 'string'],
|
'type' => ['bail', 'filled'],
|
||||||
'password' => ['bail', 'required', 'string'],
|
], [], [
|
||||||
|
'type' => '登录类型',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user = User::where('phone', $validated['phone'])->first();
|
$type = strtolower($request->input('type', 'password'));
|
||||||
|
|
||||||
if (! $user?->verifyPassword($validated['password'])) {
|
$method = 'loginUsing'.Str::studly($type);
|
||||||
throw new BizException(__('Incorrect account or password'));
|
|
||||||
|
if (! method_exists($this, $method)) {
|
||||||
|
throw new BizException('登录类型 非法');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->old_password) {
|
$user = $this->{$method}($request);
|
||||||
$user->password = $validated['password'];
|
|
||||||
$user->old_password = null;
|
if ($type === 'password') {
|
||||||
|
if ($user->old_password) {
|
||||||
|
$user->password = $request->input('password');
|
||||||
|
$user->old_password = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->last_login_at = now();
|
$user->last_login_at = now();
|
||||||
$user->last_login_ip = $request->realIp();
|
$user->last_login_ip = $request->realIp();
|
||||||
$user->save();
|
$user->save();
|
||||||
|
|
@ -75,4 +86,42 @@ class LoginController extends Controller
|
||||||
'token' => $token->plainTextToken,
|
'token' => $token->plainTextToken,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function loginUsingPassword(Request $request)
|
||||||
|
{
|
||||||
|
$validated = $request->validate([
|
||||||
|
'phone' => ['bail', 'required', 'string'],
|
||||||
|
'password' => ['bail', 'required', 'string'],
|
||||||
|
], [], [
|
||||||
|
'phone' => '手机号',
|
||||||
|
'password' => '密码',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$user = User::where('phone', $validated['phone'])->first();
|
||||||
|
|
||||||
|
if (! $user?->verifyPassword($validated['password'])) {
|
||||||
|
throw new BizException(__('Incorrect account or password'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loginUsingVerifyCode(Request $request)
|
||||||
|
{
|
||||||
|
$validated = $request->validate([
|
||||||
|
'phone' => ['bail', 'required', 'string'],
|
||||||
|
'verify_code' => ['bail', 'required', 'string'],
|
||||||
|
], [], [
|
||||||
|
'phone' => '手机号',
|
||||||
|
'verify_code' => '验证码',
|
||||||
|
]);
|
||||||
|
|
||||||
|
app(SmsCodeService::class)->validate(
|
||||||
|
$validated['phone'],
|
||||||
|
SmsCode::TYPE_LOGIN,
|
||||||
|
$validated['verify_code']
|
||||||
|
);
|
||||||
|
|
||||||
|
return User::where('phone', $validated['phone'])->firstOrFail();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ class SmsCode extends Model
|
||||||
public const TYPE_REGISTER = 1;
|
public const TYPE_REGISTER = 1;
|
||||||
public const TYPE_RESET_PASSWORD = 2;
|
public const TYPE_RESET_PASSWORD = 2;
|
||||||
public const TYPE_SET_WALLET_PASSWORD = 3;
|
public const TYPE_SET_WALLET_PASSWORD = 3;
|
||||||
|
public const TYPE_LOGIN = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
|
|
@ -53,6 +54,7 @@ class SmsCode extends Model
|
||||||
self::TYPE_REGISTER,
|
self::TYPE_REGISTER,
|
||||||
self::TYPE_RESET_PASSWORD,
|
self::TYPE_RESET_PASSWORD,
|
||||||
self::TYPE_SET_WALLET_PASSWORD,
|
self::TYPE_SET_WALLET_PASSWORD,
|
||||||
|
self::TYPE_LOGIN,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ class SmsCodeService
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SmsCode::TYPE_LOGIN:
|
||||||
case SmsCode::TYPE_RESET_PASSWORD:
|
case SmsCode::TYPE_RESET_PASSWORD:
|
||||||
case SmsCode::TYPE_SET_WALLET_PASSWORD:
|
case SmsCode::TYPE_SET_WALLET_PASSWORD:
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue