Files
xin-procurement/app/Http/Controllers/Mini/AuthController.php
T

91 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Mini;
use App\Exceptions\RepositoryException;
use App\Models\StoreModel;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\AnnoRoute\Attribute\GetRoute;
use Modules\AnnoRoute\Attribute\PostRoute;
use Modules\AnnoRoute\Attribute\PutRoute;
use Modules\AnnoRoute\Attribute\RequestAttribute;
/**
* 小程序认证(门店 账号 + 密码 登录,不再使用微信能力)
*/
#[RequestAttribute('/mini', 'mini', authGuard: 'users')]
class AuthController extends BaseMiniController
{
/** 门店登录(账号 + 密码) */
#[PostRoute('/auth/login', authorize: false)]
public function login(Request $request): JsonResponse
{
$validated = $request->validate([
'username' => 'required|string|max:20',
'password' => 'required|string|max:20',
], [
'username.required' => '请输入登录账号',
'password.required' => '请输入登录密码',
]);
$store = StoreModel::where('username', $validated['username'])->first();
if ($store === null || ! password_verify($validated['password'], (string) $store->password)) {
return $this->error('账号或密码错误');
}
if ($store->status === StoreModel::STATUS_DISABLED) {
return $this->error('账号已被停用,请联系客服处理');
}
$store->last_login_at = date('Y-m-d H:i:s');
$store->save();
$token = $store->createToken($store->username)->toArray();
$store->load('level:id,name');
return $this->success([
'token' => $token['plainTextToken'],
'user' => $store->toArray(),
], __('user.login_success'));
}
/** 当前门店信息(含客户等级) */
#[GetRoute('/auth/info')]
public function info(Request $request): JsonResponse
{
$store = StoreModel::with('level:id,name')->find($request->user()->id);
if ($store === null) {
throw new RepositoryException('账号不存在');
}
return $this->success($store->toArray());
}
/** 修改登录密码 */
#[PutRoute('/auth/password')]
public function setPassword(Request $request): JsonResponse
{
$data = $request->validate([
'oldPassword' => 'required|string|max:20',
'newPassword' => 'required|string|min:6|max:20',
'rePassword' => 'required|same:newPassword',
], [
'oldPassword.required' => '请输入原密码',
'newPassword.required' => '请输入新密码',
'newPassword.min' => '新密码至少 6 位',
'rePassword.same' => '两次输入的密码不一致',
]);
$store = $this->currentStore($request);
if (! password_verify($data['oldPassword'], (string) $store->password)) {
return $this->error('原密码不正确');
}
$store->password = password_hash($data['newPassword'], PASSWORD_DEFAULT);
$store->save();
return $this->success([], '密码修改成功');
}
}