LoginController.php
3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
namespace App\Http\Container\ProviderSection\Controllers;
use App\Enums\UserStatusEnum;
use App\Helpers\PasswordHelper;
use App\Http\Container\ProviderSection\Requests\LoginMailRequest;
use App\Http\Container\ProviderSection\Requests\LoginPhoneRequest;
use App\Models\User;
use App\Support\BusinessCode;
use Hikoon\LaravelApi\Facades\Response;
use Hikoon\LaravelApi\Support\ApiController;
use Hikoon\LaravelJwt\Support\Service as JwtService;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class LoginController extends ApiController
{
/**
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function __invoke(Request $request): mixed
{
$request->validate(['type' => 'required|in:email,phone'], ['type.required' => '请选择登录方式', 'type.in' => '登录方式暂未开发,敬请期待']);
return App::call(__CLASS__ . '@' . $request->offsetGet('type'));
}
/**
* @param \App\Http\Container\ProviderSection\Requests\LoginPhoneRequest $request
* @return \Hikoon\LaravelApi\Facades\Response
* @throws \RedisException
*/
public function phone(LoginPhoneRequest $request): Response
{
if (!$request->checkPhoneExist()) {
return $this->fail(BusinessCode::ACCOUNT_NOT_EXISTS);
}
if (!$request->checkPhoneStatus(UserStatusEnum::ACTIVATE)) {
return $this->fail(BusinessCode::ACCOUNT_STATUS_ERROR);
}
if (!$request->checkSmsKey()) {
return $this->fail(BusinessCode::SMS_CODE_ERROR);
}
return $this->login($request->offsetGet('platform'), User::phoneNumber($request->phoneNumber)->firstOrFail(['id', 'nick_name']));
}
/**
* @param \App\Http\Container\ProviderSection\Requests\LoginMailRequest $request
* @return \Hikoon\LaravelApi\Facades\Response
*/
public function email(LoginMailRequest $request): Response
{
$user = User::query()->where('email', $request->offsetGet('email'))->first(['id', 'nick_name', 'status', 'password']);
if (!$user) {
return $this->fail(BusinessCode::ACCOUNT_NOT_EXISTS);
}
if ($user->getAttribute('status') !== UserStatusEnum::ACTIVATE) {
return $this->fail(BusinessCode::ACCOUNT_STATUS_ERROR);
}
if (!PasswordHelper::verify($request->offsetGet('password'), $user->getAuthPassword())) {
return $this->fail(BusinessCode::ACCOUNT_OR_PASSWORD_ERROR);
}
return $this->login($request->offsetGet('platform'), $user);
}
/**
* @param string $guard
* @param \Illuminate\Database\Eloquent\Model|\App\Models\User $user
* @return \Hikoon\LaravelApi\Facades\Response
*/
protected function login(string $guard, Model|User $user): Response
{
$token = (new JwtService($guard, request()))->generateToken($user);
return $this->successWithData([...$user->only(['nick_name']), ...$token]);
}
}