Showing
3 changed files
with
22 additions
and
116 deletions
... | @@ -8,6 +8,7 @@ use App\Models\User; | ... | @@ -8,6 +8,7 @@ use App\Models\User; |
8 | use App\Models\UserProfile; | 8 | use App\Models\UserProfile; |
9 | use Illuminate\Http\Request; | 9 | use Illuminate\Http\Request; |
10 | use Illuminate\Support\Facades\Auth; | 10 | use Illuminate\Support\Facades\Auth; |
11 | +use Illuminate\Support\Facades\Validator; | ||
11 | use Jiannei\Response\Laravel\Support\Facades\Response; | 12 | use Jiannei\Response\Laravel\Support\Facades\Response; |
12 | use Laravel\Socialite\Facades\Socialite; | 13 | use Laravel\Socialite\Facades\Socialite; |
13 | 14 | ||
... | @@ -24,125 +25,36 @@ class AuthController extends Controller | ... | @@ -24,125 +25,36 @@ class AuthController extends Controller |
24 | } | 25 | } |
25 | 26 | ||
26 | /** | 27 | /** |
27 | - * web用户客户端授权后直接到这里 | 28 | + * 社会化用户登录 |
28 | - * @param Request $request | ||
29 | - * @param $service | ||
30 | - */ | ||
31 | - public function handleProviderCallback(Request $request, $service) | ||
32 | - { | ||
33 | - $socialUser = Socialite::driver($service)->user(); | ||
34 | - dd($socialUser); | ||
35 | -// //据说apple有问题需要用这种办法 | ||
36 | -// if ($service === 'apple'){ | ||
37 | -// // apple 登录 | ||
38 | -// try { | ||
39 | -// if ($code = $request->code) { | ||
40 | -// $response = http('https://appleid.apple.com/auth/token', [ | ||
41 | -// 'grant_type' => 'authorization_code', | ||
42 | -// 'code' => $code, | ||
43 | -// 'redirect_uri' => config('services.apple.redirect') , | ||
44 | -// 'client_id' => config('services.apple.client_id') , | ||
45 | -// 'client_secret' => config('services.apple.client_secret') , | ||
46 | -// ]); | ||
47 | -// $id_token = $response->id_token; | ||
48 | -// } else { | ||
49 | -// $id_token = $request->access_token; | ||
50 | -// } | ||
51 | -// $oauthUser = json_decode(base64_decode(explode('.', $id_token) [1])); | ||
52 | -// } | ||
53 | -// catch(\Exception $e) { | ||
54 | -// return $this->failed('apple 参数错误'); | ||
55 | -// } | ||
56 | -// } | ||
57 | -// function http($url, $params = false) | ||
58 | -// { | ||
59 | -// $ch = curl_init($url); | ||
60 | -// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
61 | -// if ($params) { | ||
62 | -// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); | ||
63 | -// } curl_setopt($ch, CURLOPT_HTTPHEADER, [ | ||
64 | -// 'Accept: application/json', | ||
65 | -// 'User-Agent: curl', # Apple requires a user agent header at the token endpoint | ||
66 | -// ]); | ||
67 | -// $response = curl_exec($ch); | ||
68 | -// return json_decode($response); | ||
69 | -// } | ||
70 | - } | ||
71 | - | ||
72 | - | ||
73 | - | ||
74 | - /** | ||
75 | - * 移动端微信用户 | ||
76 | * @param Request $request | 29 | * @param Request $request |
77 | * @param $service | 30 | * @param $service |
78 | * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource | 31 | * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource |
79 | */ | 32 | */ |
80 | public function apiHandleProviderCallback(Request $request, $service) | 33 | public function apiHandleProviderCallback(Request $request, $service) |
81 | { | 34 | { |
82 | - $code = $request->get('code'); | 35 | + $validator = Validator::make(['code' => $request->code, 'provider' => $service], [ |
36 | + 'code' => 'required', | ||
37 | + 'provider' => 'required|in:facebook,twitter,github,apple' | ||
38 | + ]); | ||
83 | 39 | ||
84 | - if (!$code) return Response::fail('code miss'); | 40 | + if ($validator->fails()){ |
41 | + return Response::fail('',500,$validator->errors()); | ||
42 | + } | ||
85 | 43 | ||
86 | $socialUser = Socialite::driver($service)->stateless()->user(); | 44 | $socialUser = Socialite::driver($service)->stateless()->user(); |
87 | 45 | ||
88 | $user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first(); | 46 | $user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first(); |
89 | 47 | ||
90 | -// if ($user == null){ | ||
91 | -// | ||
92 | -// // 如果该用户不存在则将其保存到 users 表 | ||
93 | -// $newUser = new User(); | ||
94 | -// | ||
95 | -// $newUser->name = $socialUser->getName(); | ||
96 | -// $newUser->email = $socialUser->getEmail() == '' ? '' : $socialUser->getEmail(); | ||
97 | -// $newUser->avatar = $socialUser->getAvatar(); | ||
98 | -// $newUser->password = ''; | ||
99 | -// $newUser->provider = $account; | ||
100 | -// $newUser->provider_id = $socialUser->getId(); | ||
101 | -// | ||
102 | -// $newUser->save(); | ||
103 | -// $user = $newUser; | ||
104 | -// } | ||
105 | -// | ||
106 | -// | ||
107 | -// Auth::login(); | ||
108 | - | ||
109 | - | ||
110 | - | ||
111 | - | ||
112 | - | ||
113 | - | ||
114 | - | ||
115 | - return Response::success($socialUser); | ||
116 | - | ||
117 | - | ||
118 | -// //另一种写法 | ||
119 | -// $user = User::query()->firstOrCreate([ | ||
120 | -// 'provider_id' => $oauthUser->id, | ||
121 | -// 'provider' => $service, | ||
122 | -// ],[ | ||
123 | -// 'nickname' => $oauthUser->nickname, | ||
124 | -// 'avatar' => $oauthUser->avatar, | ||
125 | -// 'provider' => $service, | ||
126 | -// 'provider_id' => $oauthUser->id, | ||
127 | -// ]); | ||
128 | -// | ||
129 | -// UserProfile::query()->firstOrCreate([ | ||
130 | -// 'user_id' => $user->id, | ||
131 | -// 'unionid' => $oauthUser->unionid, | ||
132 | -// ]); | ||
133 | - | ||
134 | - $user = User::query()->where( 'provider_id', '=', $oauthUser->id ) | ||
135 | - ->where( 'provider', '=', $service ) | ||
136 | - ->first(); | ||
137 | - | ||
138 | if ($user == null){ | 48 | if ($user == null){ |
139 | // 如果该用户不存在则将其保存到 users 表 | 49 | // 如果该用户不存在则将其保存到 users 表 |
140 | $newUser = new User(); | 50 | $newUser = new User(); |
141 | 51 | ||
142 | - $newUser->nickname = $oauthUser->nickname; | 52 | + $newUser->nickname = $socialUser->nickname ?? $socialUser->name; |
143 | - $newUser->avatar = $oauthUser->avatar; | 53 | + $newUser->email = $socialUser->email ?? ''; |
54 | + $newUser->avatar = $socialUser->avatar ?? ''; | ||
55 | + $newUser->password = ''; | ||
144 | $newUser->provider = $service; | 56 | $newUser->provider = $service; |
145 | - $newUser->provider_id = $oauthUser->id; | 57 | + $newUser->provider_id = $socialUser->id; |
146 | 58 | ||
147 | $newUser->save(); | 59 | $newUser->save(); |
148 | $user = $newUser; | 60 | $user = $newUser; |
... | @@ -150,19 +62,14 @@ class AuthController extends Controller | ... | @@ -150,19 +62,14 @@ class AuthController extends Controller |
150 | // user_profile 保存 | 62 | // user_profile 保存 |
151 | $userProfile = new UserProfile(); | 63 | $userProfile = new UserProfile(); |
152 | $userProfile->user_id = $user->id; | 64 | $userProfile->user_id = $user->id; |
153 | - $userProfile->unionid = $oauthUser->unionid; | 65 | + $userProfile->unionid = $socialUser->unionid ?? ''; |
154 | $userProfile->save(); | 66 | $userProfile->save(); |
155 | } | 67 | } |
156 | 68 | ||
157 | - Auth::guard('api')->login($user); | 69 | + $token = $user->createToken($user->id)->plainTextToken; |
158 | 70 | ||
159 | - return Response::success([ | 71 | + $response = ['token' => $token]; |
160 | - 'user_id' => $user->id, | 72 | + |
161 | - 'nickname' => $user->nickname, | 73 | + return Response::success($response); |
162 | - 'mobile' => $user->mobile, | ||
163 | - 'gender' => $user->gender, | ||
164 | - 'avatar' => $user->avatar, | ||
165 | - 'token' => $user->createToken($user->id)->plainTextToken | ||
166 | - ]); | ||
167 | } | 74 | } |
168 | } | 75 | } | ... | ... |
... | @@ -12,7 +12,7 @@ class UserProfile extends Model | ... | @@ -12,7 +12,7 @@ class UserProfile extends Model |
12 | 12 | ||
13 | protected $table = 'user_profiles'; | 13 | protected $table = 'user_profiles'; |
14 | 14 | ||
15 | - protected $fillable = ['user_id']; | 15 | + protected $fillable = ['user_id','unionid']; |
16 | 16 | ||
17 | public function user() | 17 | public function user() |
18 | { | 18 | { | ... | ... |
... | @@ -19,13 +19,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route | ... | @@ -19,13 +19,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route |
19 | $api->post('/login', 'UserController@login'); | 19 | $api->post('/login', 'UserController@login'); |
20 | $api->post('/register', 'UserController@register'); | 20 | $api->post('/register', 'UserController@register'); |
21 | $api->get('/verify', 'UserController@verify'); | 21 | $api->get('/verify', 'UserController@verify'); |
22 | -}); | ||
23 | 22 | ||
24 | -Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){ | 23 | + /** 社会化用户登录*/ |
25 | - /** 移动端微信用户登录*/ | ||
26 | $api->get('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); | 24 | $api->get('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); |
27 | }); | 25 | }); |
28 | 26 | ||
27 | + | ||
29 | //Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanctum')->group(function ($api){ | 28 | //Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanctum')->group(function ($api){ |
30 | Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api) { | 29 | Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api) { |
31 | 30 | ... | ... |
-
Please register or login to post a comment