李帅

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

...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
3 namespace App\Http\Controllers\V1; 3 namespace App\Http\Controllers\V1;
4 4
5 use App\Http\Controllers\Controller; 5 use App\Http\Controllers\Controller;
6 -use App\Models\OneUser;
7 use App\Models\User; 6 use App\Models\User;
8 use App\Models\UserProfile; 7 use App\Models\UserProfile;
9 use Illuminate\Http\Request; 8 use Illuminate\Http\Request;
10 -use Illuminate\Support\Facades\Auth;
11 use Illuminate\Support\Facades\Validator; 9 use Illuminate\Support\Facades\Validator;
12 use Jiannei\Response\Laravel\Support\Facades\Response; 10 use Jiannei\Response\Laravel\Support\Facades\Response;
13 use Laravel\Socialite\Facades\Socialite; 11 use Laravel\Socialite\Facades\Socialite;
12 +use App\Jobs\SendVerificationMessage;
13 +use Illuminate\Support\Facades\Redis;
14 14
15 class AuthController extends Controller 15 class AuthController extends Controller
16 { 16 {
...@@ -43,7 +43,10 @@ class AuthController extends Controller ...@@ -43,7 +43,10 @@ class AuthController extends Controller
43 43
44 $socialUser = Socialite::driver($service)->stateless()->user(); 44 $socialUser = Socialite::driver($service)->stateless()->user();
45 45
46 - $user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first(); 46 + $user = User::query()->where('provider', $service)
47 + ->where('provider_id', $socialUser->id)
48 + ->where('state',1)
49 + ->first();
47 50
48 if ($user == null){ 51 if ($user == null){
49 // 如果该用户不存在则将其保存到 users 表 52 // 如果该用户不存在则将其保存到 users 表
...@@ -72,4 +75,108 @@ class AuthController extends Controller ...@@ -72,4 +75,108 @@ class AuthController extends Controller
72 75
73 return Response::success($response); 76 return Response::success($response);
74 } 77 }
78 +
79 + public function socialite(Request $request, $service)
80 + {
81 + $validator = Validator::make([
82 + 'token' => $request->token,
83 + 'provider' => $service,
84 + 'provider_id' => $request->provider_id
85 + ], [
86 + 'token' => 'required|string',
87 + 'provider' => 'required|in:facebook,twitter,github,apple',
88 + 'provider_id' => 'required|string'
89 + ]);
90 + if ($validator->fails()){
91 + return Response::fail('',500,$validator->errors());
92 + }
93 +
94 + $socialUser = Socialite::driver($service)->userFromToken($request->token);
95 +
96 + $user = User::query()->where('provider', $service)
97 + ->where('provider_id', $socialUser->id)
98 + ->where('state',1)
99 + ->first();
100 +
101 + if ($user == null){
102 + // 如果该用户不存在则将其保存到 users 表
103 + $newUser = new User();
104 +
105 + $newUser->nickname = $socialUser->nickname ?? $socialUser->name;
106 + $newUser->email = $socialUser->email ?? '';
107 + $newUser->avatar = $socialUser->avatar ?? '';
108 + $newUser->password = '';
109 + $newUser->provider = $service;
110 + $newUser->provider_id = $socialUser->id;
111 +
112 + $newUser->save();
113 + $user = $newUser;
114 +
115 + // user_profile 保存
116 + $userProfile = new UserProfile();
117 + $userProfile->user_id = $user->id;
118 + $userProfile->unionid = $socialUser->unionid ?? '';
119 + $userProfile->save();
120 + }
121 +
122 + $token = $user->createToken($user->id)->plainTextToken;
123 +
124 + $response = ['token' => $token];
125 +
126 + return Response::success($response);
127 +
128 + }
129 +
130 + public function register(Request $request)
131 + {
132 + $validator = Validator::make($request->all(), [
133 + 'email' => 'required|email|unique:users|max:255',
134 + 'password' => 'required',
135 + 'verify_code' => 'required'
136 + ]);
137 +
138 + if ($validator->fails()){
139 + return Response::fail('',500,$validator->errors());
140 + }
141 +
142 + try{
143 + $redis = Redis::connection();
144 +
145 + if ($request->verify_code != '123123'){
146 + if ($redis->get($request->email) !== $request->verify_code){
147 + return Response::fail('verify code failed',500);
148 + }
149 + }
150 +
151 + $data = $validator->validated();
152 + $data['password'] = bcrypt($data['password']);
153 +
154 + $user = User::query()->create($data);
155 + UserProfile::query()->create(['user_id' => $user->id]);
156 +
157 + $token = $user->createToken($user->email)->plainTextToken;
158 +
159 + $response = ['token' => $token];
160 +
161 + return Response::success($response);
162 + }catch ( \Exception $exception ){
163 + return Response::fail('register failed',500,$exception->getMessage());
164 + }
165 + }
166 +
167 + public function verify(Request $request)
168 + {
169 + $validator = Validator::make($request->all(), [
170 + 'email' => 'required|email|max:255',
171 + ]);
172 +
173 + if ($validator->fails()){
174 + return Response::fail('',500,$validator->errors());
175 + }
176 +
177 + SendVerificationMessage::dispatch($request->email);
178 +
179 + return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
180 + 'Has been sent to your email: ' . $request->email);
181 + }
75 } 182 }
......
...@@ -3,24 +3,17 @@ ...@@ -3,24 +3,17 @@
3 namespace App\Http\Controllers\V1; 3 namespace App\Http\Controllers\V1;
4 4
5 use App\Http\Controllers\Controller; 5 use App\Http\Controllers\Controller;
6 -use App\Jobs\SendVerificationMessage;
7 use App\Models\Immerse; 6 use App\Models\Immerse;
8 use App\Models\User; 7 use App\Models\User;
9 -use App\Models\UserProfile;
10 use Illuminate\Http\Request; 8 use Illuminate\Http\Request;
11 use Illuminate\Support\Facades\Auth; 9 use Illuminate\Support\Facades\Auth;
12 -use Illuminate\Support\Facades\File;
13 use Illuminate\Support\Facades\Hash; 10 use Illuminate\Support\Facades\Hash;
14 -use Illuminate\Support\Facades\Mail;
15 -use Illuminate\Support\Facades\Redis;
16 use Illuminate\Support\Facades\Storage; 11 use Illuminate\Support\Facades\Storage;
17 use Illuminate\Support\Facades\Validator; 12 use Illuminate\Support\Facades\Validator;
18 use Jiannei\Response\Laravel\Support\Facades\Response; 13 use Jiannei\Response\Laravel\Support\Facades\Response;
19 14
20 class UserController extends Controller 15 class UserController extends Controller
21 { 16 {
22 - //
23 -
24 public function login(Request $request) 17 public function login(Request $request)
25 { 18 {
26 $validator = Validator::make($request->all(), [ 19 $validator = Validator::make($request->all(), [
...@@ -50,59 +43,6 @@ class UserController extends Controller ...@@ -50,59 +43,6 @@ class UserController extends Controller
50 43
51 } 44 }
52 45
53 - public function register(Request $request)
54 - {
55 - $validator = Validator::make($request->all(), [
56 - 'email' => 'required|email|unique:users|max:255',
57 - 'password' => 'required',
58 - 'verify_code' => 'required'
59 - ]);
60 -
61 - if ($validator->fails()){
62 - return Response::fail('',500,$validator->errors());
63 - }
64 -
65 - try{
66 - $redis = Redis::connection();
67 -
68 - if ($request->verify_code != '123123'){
69 - if ($redis->get($request->email) !== $request->verify_code){
70 - return Response::fail('verify code failed',500);
71 - }
72 - }
73 -
74 - $data = $validator->validated();
75 - $data['password'] = bcrypt($data['password']);
76 -
77 - $user = User::query()->create($data);
78 - UserProfile::query()->create(['user_id' => $user->id]);
79 -
80 - $token = $user->createToken($user->email)->plainTextToken;
81 -
82 - $response = ['token' => $token];
83 -
84 - return Response::success($response);
85 - }catch ( \Exception $exception ){
86 - return Response::fail('register failed',500,$exception->getMessage());
87 - }
88 - }
89 -
90 - public function verify(Request $request)
91 - {
92 - $validator = Validator::make($request->all(), [
93 - 'email' => 'required|email|max:255',
94 - ]);
95 -
96 - if ($validator->fails()){
97 - return Response::fail('',500,$validator->errors());
98 - }
99 -
100 - SendVerificationMessage::dispatch($request->email);
101 -
102 - return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
103 - 'Has been sent to your email: ' . $request->email);
104 - }
105 -
106 public function avatar(Request $request) 46 public function avatar(Request $request)
107 { 47 {
108 $validator = Validator::make($request->all(), [ 48 $validator = Validator::make($request->all(), [
...@@ -184,4 +124,48 @@ class UserController extends Controller ...@@ -184,4 +124,48 @@ class UserController extends Controller
184 124
185 return Response::success(['delete' => true]); 125 return Response::success(['delete' => true]);
186 } 126 }
127 +
128 + public function update(Request $request, $id)
129 + {
130 + $validator = Validator::make($request->all(), [
131 + 'avatar' => 'required|string',
132 + 'email' => 'required|string',
133 + 'nickname' => 'required|string',
134 + 'gender' => 'sometimes|integer',
135 + ]);
136 +
137 + if ($validator->fails()){
138 + return Response::fail('',500,$validator->errors());
139 + }
140 +
141 + try{
142 + $user = User::query()->find($id);
143 + if ($user->id != $request->user()->id) return Response::fail('不可修改他人信息',500);
144 +
145 + $user->email = $request->email;
146 + $user->avatar = $request->avatar;
147 + $user->nickname = $request->nickname;
148 + $user->gender = $request->gender ?? 0;
149 +
150 + $user->save();
151 +
152 + }catch ( \Exception $exception ){
153 + return Response::fail('',500,$exception->getMessage());
154 + }
155 +
156 + return Response::success(['avatar' => $user->avatar]);
157 + }
158 +
159 + public function destroy($id, Request $request)
160 + {
161 + $user = User::query()->find($id);
162 +
163 + if ($user->id != $request->user()->id) return Response::fail('不可注销他人信息',500);
164 +
165 + $user->state = 0;
166 +
167 + $user->save();
168 +
169 + return Response::success(['destroy' => true]);
170 + }
187 } 171 }
......
...@@ -17,10 +17,12 @@ use Illuminate\Routing\Router; ...@@ -17,10 +17,12 @@ use Illuminate\Routing\Router;
17 Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){ 17 Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){
18 /** 用户账密登录*/ 18 /** 用户账密登录*/
19 $api->post('/login', 'UserController@login'); 19 $api->post('/login', 'UserController@login');
20 - $api->post('/register', 'UserController@register'); 20 +
21 + /** 用户注册*/
22 + $api->post('/register', 'AuthController@register');
21 23
22 /** 发送验证码 */ 24 /** 发送验证码 */
23 - $api->get('/verify', 'UserController@verify'); 25 + $api->get('/verify', 'AuthController@verify');
24 26
25 /** 社会化用户登录*/ 27 /** 社会化用户登录*/
26 $api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); 28 $api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback');
...@@ -53,6 +55,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanc ...@@ -53,6 +55,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanc
53 /** 用户信息*/ 55 /** 用户信息*/
54 $api->get('/user', 'UserController@user'); 56 $api->get('/user', 'UserController@user');
55 57
58 + /** 用户信息修改*/
59 + $api->put('/user/{id}', 'UserController@update');
60 +
61 + /** 用户注销*/
62 + $api->delete('/user/{id}', 'UserController@destroy');
63 +
56 /** 我的作品 */ 64 /** 我的作品 */
57 $api->get('/my/videos', 'UserController@videos'); 65 $api->get('/my/videos', 'UserController@videos');
58 66
......