李帅

1.优化用户登录,注销。

......@@ -3,14 +3,14 @@
namespace App\Http\Controllers\V1;
use App\Http\Controllers\Controller;
use App\Models\OneUser;
use App\Models\User;
use App\Models\UserProfile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;
use Laravel\Socialite\Facades\Socialite;
use App\Jobs\SendVerificationMessage;
use Illuminate\Support\Facades\Redis;
class AuthController extends Controller
{
......@@ -43,7 +43,10 @@ class AuthController extends Controller
$socialUser = Socialite::driver($service)->stateless()->user();
$user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first();
$user = User::query()->where('provider', $service)
->where('provider_id', $socialUser->id)
->where('state',1)
->first();
if ($user == null){
// 如果该用户不存在则将其保存到 users 表
......@@ -72,4 +75,108 @@ class AuthController extends Controller
return Response::success($response);
}
public function socialite(Request $request, $service)
{
$validator = Validator::make([
'token' => $request->token,
'provider' => $service,
'provider_id' => $request->provider_id
], [
'token' => 'required|string',
'provider' => 'required|in:facebook,twitter,github,apple',
'provider_id' => 'required|string'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
$socialUser = Socialite::driver($service)->userFromToken($request->token);
$user = User::query()->where('provider', $service)
->where('provider_id', $socialUser->id)
->where('state',1)
->first();
if ($user == null){
// 如果该用户不存在则将其保存到 users 表
$newUser = new User();
$newUser->nickname = $socialUser->nickname ?? $socialUser->name;
$newUser->email = $socialUser->email ?? '';
$newUser->avatar = $socialUser->avatar ?? '';
$newUser->password = '';
$newUser->provider = $service;
$newUser->provider_id = $socialUser->id;
$newUser->save();
$user = $newUser;
// user_profile 保存
$userProfile = new UserProfile();
$userProfile->user_id = $user->id;
$userProfile->unionid = $socialUser->unionid ?? '';
$userProfile->save();
}
$token = $user->createToken($user->id)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users|max:255',
'password' => 'required',
'verify_code' => 'required'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$redis = Redis::connection();
if ($request->verify_code != '123123'){
if ($redis->get($request->email) !== $request->verify_code){
return Response::fail('verify code failed',500);
}
}
$data = $validator->validated();
$data['password'] = bcrypt($data['password']);
$user = User::query()->create($data);
UserProfile::query()->create(['user_id' => $user->id]);
$token = $user->createToken($user->email)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail('register failed',500,$exception->getMessage());
}
}
public function verify(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
SendVerificationMessage::dispatch($request->email);
return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
'Has been sent to your email: ' . $request->email);
}
}
......
......@@ -3,24 +3,17 @@
namespace App\Http\Controllers\V1;
use App\Http\Controllers\Controller;
use App\Jobs\SendVerificationMessage;
use App\Models\Immerse;
use App\Models\User;
use App\Models\UserProfile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;
class UserController extends Controller
{
//
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
......@@ -50,59 +43,6 @@ class UserController extends Controller
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users|max:255',
'password' => 'required',
'verify_code' => 'required'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$redis = Redis::connection();
if ($request->verify_code != '123123'){
if ($redis->get($request->email) !== $request->verify_code){
return Response::fail('verify code failed',500);
}
}
$data = $validator->validated();
$data['password'] = bcrypt($data['password']);
$user = User::query()->create($data);
UserProfile::query()->create(['user_id' => $user->id]);
$token = $user->createToken($user->email)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail('register failed',500,$exception->getMessage());
}
}
public function verify(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
SendVerificationMessage::dispatch($request->email);
return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
'Has been sent to your email: ' . $request->email);
}
public function avatar(Request $request)
{
$validator = Validator::make($request->all(), [
......@@ -184,4 +124,48 @@ class UserController extends Controller
return Response::success(['delete' => true]);
}
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'avatar' => 'required|string',
'email' => 'required|string',
'nickname' => 'required|string',
'gender' => 'sometimes|integer',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$user = User::query()->find($id);
if ($user->id != $request->user()->id) return Response::fail('不可修改他人信息',500);
$user->email = $request->email;
$user->avatar = $request->avatar;
$user->nickname = $request->nickname;
$user->gender = $request->gender ?? 0;
$user->save();
}catch ( \Exception $exception ){
return Response::fail('',500,$exception->getMessage());
}
return Response::success(['avatar' => $user->avatar]);
}
public function destroy($id, Request $request)
{
$user = User::query()->find($id);
if ($user->id != $request->user()->id) return Response::fail('不可注销他人信息',500);
$user->state = 0;
$user->save();
return Response::success(['destroy' => true]);
}
}
......
......@@ -17,10 +17,12 @@ use Illuminate\Routing\Router;
Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){
/** 用户账密登录*/
$api->post('/login', 'UserController@login');
$api->post('/register', 'UserController@register');
/** 用户注册*/
$api->post('/register', 'AuthController@register');
/** 发送验证码 */
$api->get('/verify', 'UserController@verify');
$api->get('/verify', 'AuthController@verify');
/** 社会化用户登录*/
$api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback');
......@@ -53,6 +55,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanc
/** 用户信息*/
$api->get('/user', 'UserController@user');
/** 用户信息修改*/
$api->put('/user/{id}', 'UserController@update');
/** 用户注销*/
$api->delete('/user/{id}', 'UserController@destroy');
/** 我的作品 */
$api->get('/my/videos', 'UserController@videos');
......