Skip to content

Commit 4b07254

Browse files
committed
feat: Added social login and register
1 parent fdb9b56 commit 4b07254

File tree

10 files changed

+1853
-784
lines changed

10 files changed

+1853
-784
lines changed

.env.example

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ VITE_PUSHER_HOST="${PUSHER_HOST}"
5757
VITE_PUSHER_PORT="${PUSHER_PORT}"
5858
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
5959
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
60+
61+
GITHUB_CLIENT_ID=""
62+
GITHUB_CLIENT_SECRET=""
63+
GOOGLE_CLIENT_ID=""
64+
GOOGLE_CLIENT_SECRET=""
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Models\User;
7+
use Illuminate\Support\Facades\Auth;
8+
use Illuminate\Http\Request;
9+
use Laravel\Socialite\Facades\Socialite;
10+
11+
class ProviderController extends Controller
12+
{
13+
public function redirect($provider)
14+
{
15+
return Socialite::driver($provider)->redirect();
16+
}
17+
public function callback($provider)
18+
{
19+
try {
20+
21+
$socialuser = Socialite::driver($provider)->user();
22+
if (User::where('email', $socialuser->email)->first()->provider != $provider) {
23+
return redirect('/login')->withErrors(['email' => 'Email uses another provider. Please login with ' . User::where('email', $socialuser->email)->first()->provider . ' instead.']);
24+
}
25+
26+
$name = $socialuser->name;
27+
if($name == null){
28+
$name = $socialuser->nickname;
29+
}
30+
if($name == null){
31+
$name = $socialuser->username;
32+
}
33+
if($name == null){
34+
$name = explode('@', $socialuser->email)[0];
35+
}
36+
$user = User::updateOrCreate([
37+
'provider_id' => $socialuser->id,
38+
'provider' => $provider
39+
], [
40+
'name' => $name,
41+
'email' => $socialuser->email,
42+
'provider_token' => $socialuser->token,
43+
]);
44+
Auth::login($user);
45+
46+
if (!$user->hasVerifiedEmail()) {
47+
$user->markEmailAsVerified();
48+
}
49+
50+
return redirect('/dashboard');
51+
} catch (\Exception $e) {
52+
// log error on console
53+
return redirect('/login');
54+
}
55+
56+
57+
58+
}
59+
}

app/Models/User.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class User extends Authenticatable implements MustVerifyEmail
2121
'name',
2222
'email',
2323
'password',
24+
'provider',
25+
'provider_id',
26+
'provider_token',
2427
];
2528

2629
/**

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
"guzzlehttp/guzzle": "^7.2",
1111
"laravel/framework": "^10.10",
1212
"laravel/sanctum": "^3.3",
13-
"laravel/tinker": "^2.8"
13+
"laravel/socialite": "^5.15",
14+
"laravel/tinker": "^2.8",
15+
"doctrine/dbal": "^3.3"
1416
},
1517
"require-dev": {
1618
"fakerphp/faker": "^1.9.1",

0 commit comments

Comments
 (0)