質問編集履歴

1

情報の追加

2019/02/23 13:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,11 @@
36
36
 
37
37
 
38
38
 
39
- ```ここに言語名を入力
39
+ ```php
40
+
41
+ app/Http/Controllers/SocialAccountController
42
+
43
+
40
44
 
41
45
  <?php
42
46
 
@@ -179,3 +183,273 @@
179
183
  Laravel Framework 5.7.25
180
184
 
181
185
  PHP 7.2.11-4+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Nov 4 2018 05:11:49) ( NTS )
186
+
187
+ その他関係するコード
188
+
189
+ ```
190
+
191
+ //Cast.php
192
+
193
+ <?php
194
+
195
+
196
+
197
+ namespace App;
198
+
199
+
200
+
201
+ use Illuminate\Notifications\Notifiable;
202
+
203
+ use Illuminate\Contracts\Auth\MustVerifyEmail;
204
+
205
+ use Illuminate\Contracts\Auth\Guard;
206
+
207
+ use Illuminate\Contracts\Auth\UserProvider;
208
+
209
+ use Illuminate\Foundation\Auth\User as Authenticatable;
210
+
211
+
212
+
213
+ class Cast extends Authenticatable
214
+
215
+ {
216
+
217
+ use Notifiable;
218
+
219
+ protected $table = 'cast';
220
+
221
+ /**
222
+
223
+ * The attributes that are mass assignable.
224
+
225
+ *
226
+
227
+ * @var array
228
+
229
+ */
230
+
231
+ protected $fillable = [
232
+
233
+ 'name', 'email', 'password',
234
+
235
+ ];
236
+
237
+ /**
238
+
239
+ * The attributes that should be hidden for arrays.
240
+
241
+ *
242
+
243
+ * @var array
244
+
245
+ */
246
+
247
+ protected $hidden = [
248
+
249
+ 'password', 'remember_token',
250
+
251
+ ];
252
+
253
+ public function accounts(){
254
+
255
+ return $this->hasMany('App\LinkedSocialAccountCast');
256
+
257
+ }
258
+
259
+ }
260
+
261
+ ```
262
+
263
+ ```
264
+
265
+ //linkedsocialaccount.php
266
+
267
+ <?php
268
+
269
+
270
+
271
+ namespace App;
272
+
273
+
274
+
275
+ use Illuminate\Database\Eloquent\Model;
276
+
277
+
278
+
279
+ class LinkedSocialAccount extends Model
280
+
281
+ {
282
+
283
+ //linked_social_accountsに関してのテーブル。
284
+
285
+ protected $fillable = ['provider_name', 'provider_id' ]; //値を格納することを許す
286
+
287
+ public function user()
288
+
289
+ {
290
+
291
+ return $this->belongsTo('App\User'); //従属関係の定義をする。
292
+
293
+ }
294
+
295
+
296
+
297
+ }
298
+
299
+
300
+
301
+ ```
302
+
303
+ ```
304
+
305
+ <?php
306
+
307
+
308
+
309
+ namespace App;
310
+
311
+
312
+
313
+ use Laravel\Socialite\Contracts\User as ProviderUser;
314
+
315
+
316
+
317
+ class SocialAccountsService
318
+
319
+ {
320
+
321
+ public function findOrCreate(ProviderUser $providerUser, $provider)
322
+
323
+ {
324
+
325
+ $value = session('CastOrGuest');
326
+
327
+ if($value == 'guest'){
328
+
329
+ // 検索
330
+
331
+ //まずはプロバイダーよって参照するテーブルを絞る。そのあと、プロバイダーのidで検索結果をさらに絞る、
332
+
333
+ //LinkedSocialAccountモデルを用いる。
334
+
335
+ $account = LinkedSocialAccount::where('provider_name', $provider) //Facebook認証しか利用しないためこの文は必要ないが、拡張性を考慮して記述しておく。
336
+
337
+ ->where('provider_id', $providerUser->getId()) //プロバイダー発行のidで絞る。
338
+
339
+ ->first();
340
+
341
+ //$accountがnullでないならそのまま
342
+
343
+ if ($account) {
344
+
345
+ return $account->user; //$accountを返すとlinkedsocialaccountテーブルのデータを返すが、->userを指定するとusersテーブルから情報を引っ張ってくるようになった。
346
+
347
+ } else {
348
+
349
+ //見つからなければemailで検索をかける
350
+
351
+ $user = User::where('email', $providerUser->getEmail())->first();
352
+
353
+
354
+
355
+ if (! $user) { //検索結果がnullならば新しくユーザーを作成する。
356
+
357
+ $user = User::create([
358
+
359
+ 'email' => $providerUser->getEmail(),
360
+
361
+ 'name' => $providerUser->getName(),
362
+
363
+ ]);
364
+
365
+ }
366
+
367
+ //リレーションを持たせてcreateする。
368
+
369
+ $user->accounts()->create([
370
+
371
+ 'provider_id' => $providerUser->getId(),
372
+
373
+ 'provider_name' => $provider,
374
+
375
+ ]);
376
+
377
+ //返り値としてユーザーを返す。
378
+
379
+ return $user;
380
+
381
+ }
382
+
383
+ //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
384
+
385
+ //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
386
+
387
+ }else if($value == 'cast'){
388
+
389
+ $account = LinkedSocialAccountCast::where('provider_name', $provider) //Facebook認証しか利用しないためこの文は必要ないが、拡張性を考慮して記述しておく。
390
+
391
+ ->where('provider_id', $providerUser->getId()) //プロバイダー発行のidで絞る。
392
+
393
+ ->first();
394
+
395
+ //$accountがnullでないならそのまま
396
+
397
+ if ($account) {
398
+
399
+ return $account;
400
+
401
+ } else {
402
+
403
+ //見つからなければemailで検索をかける。
404
+
405
+ $user = Cast::where('email', $providerUser->getEmail())->first();
406
+
407
+
408
+
409
+ if (! $user) { //検索結果がnullならば新しくユーザーを作成する。
410
+
411
+ $user = Cast::create([
412
+
413
+ 'email' => $providerUser->getEmail(),
414
+
415
+ 'name' => $providerUser->getName(),
416
+
417
+ ]);
418
+
419
+ }
420
+
421
+ //リレーションを持たせてcreateする。
422
+
423
+ $user->accounts()->create([
424
+
425
+ 'provider_id' => $providerUser->getId(),
426
+
427
+ 'provider_name' => $provider,
428
+
429
+ ]);
430
+
431
+ //返り値としてユーザーを返す。
432
+
433
+ $account = LinkedSocialAccountCast::where('provider_name', $provider) //Facebook認証しか利用しないためこの文は必要ないが、拡張性を考慮して記述しておく。
434
+
435
+ ->where('provider_id', $providerUser->getId()) //プロバイダー発行のidで絞る。
436
+
437
+ ->first();
438
+
439
+ return $account;
440
+
441
+ //return $user; //てめーが犯人だろわかったぞ
442
+
443
+
444
+
445
+ }
446
+
447
+ }
448
+
449
+ }
450
+
451
+ }
452
+
453
+
454
+
455
+ ```