Second Commit
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

104 行
2.5 KiB

  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Models\UserAccount;
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Support\Facades\Auth;
  6. use App\Providers\RouteServiceProvider;
  7. use Exception;
  8. use Laravel\Socialite\Facades\Socialite;
  9. use Illuminate\Foundation\Auth\AuthenticatesUsers;
  10. class LoginController extends Controller
  11. {
  12. /*
  13. |--------------------------------------------------------------------------
  14. | Login Controller
  15. |--------------------------------------------------------------------------
  16. |
  17. | This controller handles authenticating users for the application and
  18. | redirecting them to your home screen. The controller uses a trait
  19. | to conveniently provide its functionality to your applications.
  20. |
  21. */
  22. use AuthenticatesUsers;
  23. /**
  24. * Where to redirect users after login.
  25. *
  26. * @var string
  27. */
  28. protected $redirectTo = RouteServiceProvider::HOME;
  29. /**
  30. * Create a new controller instance.
  31. *
  32. * @return void
  33. */
  34. public function __construct()
  35. {
  36. $this->middleware('guest')->except('logout');
  37. }
  38. public function redirectToProvider($provider)
  39. {
  40. return Socialite::driver($provider)->redirect();
  41. }
  42. /**
  43. * @param $provider
  44. * @return \Illuminate\Http\RedirectResponse
  45. */
  46. public function handleProvideCallback($provider)
  47. {
  48. try {
  49. $user = Socialite::driver($provider)->user();
  50. }catch (Exception $e) {
  51. return redirect()->back();
  52. }
  53. $authUser = $this->findOrCreateUser($user, $provider);
  54. Auth()->login($authUser, true);
  55. return redirect()->route('home');
  56. }
  57. /**
  58. * @param $socialUser
  59. * @param $provider
  60. * @return mixed
  61. */
  62. public function findOrCreateUser($socialUser, $provider)
  63. {
  64. $socialAccount = UserAccount::where('provider_id', $socialUser->getId())
  65. ->where('provider_name', $provider)
  66. ->first();
  67. if ($socialAccount) {
  68. return $socialAccount->user;
  69. } else {
  70. $user = UserAccount::where('email', $socialUser->getEmail())->first();
  71. if (! $user) {
  72. $user = UserAccount::create([
  73. 'name' => $socialUser->getName(),
  74. 'email' => $socialUser->getEmail(),
  75. 'provider_id' => $socialUser->getId(),
  76. 'provider_name' => $provider
  77. ]);
  78. }
  79. return $user;
  80. }
  81. }
  82. }