```
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\BaseController;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\Models\User;
use Validator;
class UserController extends BaseController
{
/**
* 注冊
* @author Neo
* @param Request $request 請求
* @return mixed
*/
public function register(Request $request)
{
// 驗證參數
$validator = Validator::make($request->all(), [
'name' => 'required|string',
'email' => 'required|string|email',
'password' => 'required|string|confirmed',
]);
if ($validator->fails())
{
return response()->json(['failed' => [],'status' => 'error', 'message' => '格式錯誤']);
}
// 字符@讓name和email獲得唯一性,可用name或者email做登錄,
// 日后加入電話號碼,再分1.電話和2.用戶名/郵箱的輸入框
$nameStr = strstr(request('name'), '@');
if($nameStr)
{
return response()->json(['status' => 'success', 'code'=> 201, 'message' => '用戶名不可有@字符']);
}
$name = User::where('name', request('name'))->first();
if(!empty($name))
{
return response()->json(['status' => 'success', 'code'=> 201, 'message' => '用戶名已經存在']);
}
$email = User::where('email', request('email'))->first();
if(!empty($email))
{
return response()->json(['status' => 'success', 'code'=> 202, 'message' => '郵箱已經存在']);
}
// 創建新用戶
try {
$user = new User();
$user->name = request('name');
$user->email = request('email');
$user->password = app('hash')->make(request('password'));
if ($user->save())
{
return $this->login($request);
}
} catch (\Exception $e) {
return response()->json(['status' => 'error', 'message' => $e->getMessage()]);
}
}
/**
* 登錄
* @author Neo
* @param Request $request 請求
* @return mixed
*/
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'username' => 'required|string',
'password' => 'required|string',
'remember_me' => 'boolean',
]);
if ($validator->fails())
{
return response()->json(['failed' => [],'status' => 'error', 'message' => '格式錯誤']);
}
$user = User::where('name', request('username'))->first();
if(empty($user))
{
return response()->json(['status' => 'success', 'code'=> 202, 'message' => '用戶名和郵箱還沒有注冊']);
} else
{
$credentials['email'] = $user->email;
$credentials['password'] = request('password');
}
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
{
$token->expires_at = Carbon::now()->addWeeks(1);
}
$token->save();
$data = [
'status' => true,
'userId' => $user['id'],
'username' => $user['name'],
// 'accessToken' => $tokenResult->accessToken,
'token' => $tokenResult->accessToken,
'tokenType' => 'Bearer',
'expiresAt' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString(),
];
return response()->json([ 'code' => 200, 'message' => '登錄成功', 'data' => $data ]);
}
/**
* 登出
* @author Neo
* @param Request $request 請求
* @return mixed
*/
public function logout(Request $request)
{
try {
auth()->user()->tokens()->each(function ($token) {
$token->delete();
});
return response()->json(['status' => 'success', 'message' => '登出成功']);
} catch (\Exception $e) {
return response()->json(['status' => 'error', 'message' => $e->getMessage()]);
}
}
/**
* 用戶數據
* @author Neo
* @param Request $request 請求
* @return mixed
*/
public function info(Request $request)
{
return response()->json($request->user());
}
}
```
- 分布式架構設計概要
- 技術管理
- 1.流程規范
- 2.精準效率
- 3.同步工具
- 代碼審核
- 編程思想
- 控制反轉和依賴注入
- public、private、protected
- MySQL
- MySQL安裝
- MySQL常用
- MySQL主從配置
- 讀寫分離
- 分庫分表
- 高可用
- MySQL集群
- MySQL優化
- MySQL慢查詢優化
- 數據結構
- MySQL備份
- MySQL導出導入
- MSSQL
- 導出導入
- Redis
- Redis日常操作
- Redis安裝
- Redis主從配置
- Redis哨兵
- 隊列
- 分布式式鎖
- Redis集群
- redis的緩存雪崩與緩存穿透
- Linux
- Linux基本操作
- Linux基礎操作1
- Linux安裝
- Linux安裝Nginx
- Linux安裝MySQL
- Linux安裝PHP
- Linux安裝Redis
- Linux安裝Swoole
- Linux安裝Elasticsearch
- Linux安裝Mycat
- Linux優化
- 集群
- 服務器管理
- Nginx
- Nginx 首頁外鏈接出現404問題
- Nginx常用命令行
- LNMP一鍵安裝的404錯誤
- http和https站點設置
- Linux shell expect spawn
- Ubuntu環境
- 寶塔
- 定時任務
- Windows
- 生成OpenSSL證書
- Git
- Git基本操作
- Git練習
- Git上傳到遠程倉庫,遠程倉庫更新到指定文件夾
- Git案例1
- Git案例2
- Git部署
- 遠程連接
- 服務器原理
- 進程和線程
- 騰訊云
- 寶塔命令行
- 消息隊列系統
- RabbitMQ
- RabbitMQ+Laravel
- Kafka
- Elasticsearch
- Laravel+Elasticsearch
- Elasticsearch Demo:ES搜索題目和內容
- 分布式
- PHP
- Laravel高級集成開發
- PHP技術棧
- LNMP
- LNMP+Laravel出現問題
- PHP+MySQL
- PHP連接MySQL
- PHP+Redis
- PHP連接Redis
- PHP+Redis簡單操作
- Laravel+Redis
- Laravel+Swoole
- Swoole
- Swoole TCP案例
- Swoole HTTP案例
- Sswoole WebSocket案例
- Swoole發短信案例
- ThinkPHP
- Java技術棧
- 文檔參考
- docker
- docker一般使用
- docker項目1
- docker+lnmp
- docker搭建wordpress
- Docker部署單體到微服務架構(Laravel)
- Docker部署單體到微服務架構(Spring Boot)
- docker部署vue項目
- Dockerfile
- 其他
- 筆記1
- 筆記2
- 開發速度
- 代碼質量
- 踩過的坑
- 編輯器
- VSCode