Skip to content

Commit 0f1ed3f

Browse files
committed
Integrated GitHub OAuth authentication. Cleaned up a bunch of routes and improved README
1 parent 873c3a4 commit 0f1ed3f

16 files changed

+122
-22
lines changed

README.markdown

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
[HackerPair](http://hackerpair.com) is the companion project to the
44
bestselling book, [Easy Laravel 5](http://easylaravelbook.com),
5-
authored by [W. Jason Gilmore](http://www.wjgilmore.com).
5+
authored by [W. Jason Gilmore](http://www.wjgilmore.com). The new edition of Easy Laravel 5 is currently available in beta version at a discounted price.
6+
7+
![Easy Laravel 5](https://raw.githubusercontent.com/wjgilmore/hackerpair/master/public/img/book-small-web.png)
68

79
## Installation
810

@@ -52,7 +54,9 @@ haven't already done so. You'll also need to create the database and
5254
associated settings, using these values to populate the above settings
5355
in your `.env` file.
5456

55-
### Step #3.
57+
### Step #3. Update the Vue Configuration File
58+
59+
Inside `resources/assets/js` you'll find a file named `config.js.example`. This file contains a lone configuration variable named `GOOGLE_MAPS_API_KEY`. Rename it to `config.js` and assign this variable your Google Maps API key. This key is responsible for authentication when using Google's geocoder and map display APIs.
5660

5761
### Step #4. Run the Migrations
5862

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use Illuminate\Http\Request;
6+
use App\Http\Controllers\Controller;
7+
8+
use Auth;
9+
10+
use Carbon\Carbon;
11+
use Socialite;
12+
13+
use App\User;
14+
15+
class SocialGitHubController extends Controller
16+
{
17+
18+
/**
19+
* Redirect the user to the GitHub authentication page.
20+
*
21+
* @return \Illuminate\Http\Response
22+
*/
23+
public function redirectToProvider()
24+
{
25+
return Socialite::driver('github')->redirect();
26+
}
27+
28+
/**
29+
* Obtain the user information from GitHub.
30+
*
31+
* @return \Illuminate\Http\Response
32+
*/
33+
public function handleProviderCallback()
34+
{
35+
36+
$firstName = null;
37+
$lastName = null;
38+
39+
$user = Socialite::driver('github')->user();
40+
41+
$existingUser = User::where('provider_id', $user->getId())->first();
42+
43+
if ($existingUser) {
44+
45+
$existingUser->last_login_at = Carbon::now();
46+
$existingUser->save();
47+
48+
Auth::login($existingUser);
49+
50+
} else {
51+
52+
if ($user->getName()) {
53+
54+
$name = explode(" ", $user->getName());
55+
56+
if (count($name) > 1) {
57+
$firstName = $name[0];
58+
$lastName = $name[1];
59+
} else {
60+
$firstName = $name[0];
61+
$lastName = null;
62+
}
63+
64+
}
65+
66+
$newUser = new User();
67+
68+
$newUser->first_name = $firstName;
69+
$newUser->last_name = $lastName;
70+
$newUser->email = $user->getEmail();
71+
$newUser->provider = 'github';
72+
$newUser->provider_id = $user->getId();
73+
$newUser->handle_github = $user->getNickname();
74+
$newUser->password = bcrypt(uniqid());
75+
$newUser->last_login_at = Carbon::now();
76+
77+
$newUser->save();
78+
79+
Auth::login($newUser);
80+
81+
}
82+
83+
flash('Successfully authenticated using GitHub');
84+
85+
return redirect('/');
86+
87+
}
88+
89+
}

app/Http/Controllers/UserHostedEventsController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public function update(EventRequest $request, User $user, Event $event)
102102

103103
flash('Event updated!')->success();
104104

105-
return redirect()->route('users.hosted-events.edit', [$user, $event]);
105+
return redirect()->route('users.hosted.edit', [$user, $event]);
106106

107107
}
108108

app/Providers/RouteServiceProvider.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function boot()
2525
{
2626
parent::boot();
2727

28-
Route::model('hosted-event', \App\Event::class);
28+
Route::model('hosted', \App\Event::class);
2929
Route::bind('any_hosted_event', function($slug) {
3030
return \App\Event::withoutGlobalScopes()->where('slug', $slug)->first();
3131
});

database/migrations/2014_10_12_000000_create_users_table.php

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public function up()
1616
Schema::create('users', function (Blueprint $table) {
1717

1818
$table->increments('id');
19+
$table->string('provider')->nullable();
20+
$table->integer('provider_id')->unsigned()->nullable();
1921
$table->string('first_name');
2022
$table->string('last_name');
2123
$table->string('email');

public/css/app.css

+4
Original file line numberDiff line numberDiff line change
@@ -9808,6 +9808,10 @@ span.navbar-toggler-icon {
98089808
color: red;
98099809
}
98109810

9811+
.book {
9812+
border: 1px solid black;
9813+
}
9814+
98119815
.card {
98129816
border-radius: 0px;
98139817
}

public/img/book-small-web.png

50.7 KB
Loading

resources/assets/sass/styles.scss

+6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ span.navbar-toggler-icon {
104104
color: red;
105105
}
106106

107+
// Book
108+
109+
.book {
110+
border: 1px solid black;
111+
}
112+
107113
// Cards
108114

109115
.card {

resources/views/about/book.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<div class="col-3">
1616

1717
<a href="http://www.easylaravelbook.com">
18-
<img src="{{ asset('img/book-large-web.jpg') }}" class="img-fluid" />
18+
<img src="{{ asset('img/book-large-web.jpg') }}" class="img-fluid book" />
1919
</a>
2020

2121
<p>

resources/views/auth/login.blade.php

+1-5
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@
1212
<div class="col-md-6 offset-md-3 my-auto" style="padding-top: 25px">
1313

1414
<div style="text-align: center; padding-bottom: 10px;">
15-
<a href="/auth/twitter" class="btn btn-lg btn-info btn-block" style="background-color: #1A97F0">
16-
<span class="fa fa-twitter"></span> Login with Twitter
17-
</a>
18-
<br />
19-
<a href="/auth/github" class="btn btn-lg btn-info btn-block" style="background-color: #000000">
15+
<a href="/auth/github" class="btn btn-lg btn-info btn-block" style="background-color: #000000; border: 1px solid white;">
2016
<span class="fa fa-github"></span> Login with GitHub
2117
</a>
2218
<br />

resources/views/auth/register.blade.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@
99
<h1>Create a HackerPair Account</h1>
1010

1111
<p>
12-
Create a HackerPair account by authenticating your identity using Twitter or Github. Alternatively,
12+
Create a HackerPair account by authenticating your identity using Github. Alternatively,
1313
you can use the below form to create a new account.
1414
</p>
1515

16-
<a href="/auth/twitter" class="btn btn-lg btn-info" style="margin-right: 25px; background-color: #1A97F0">
17-
<span class="fa fa-twitter"></span> Login with Twitter
18-
</a>
1916
<a href="/auth/github" class="btn btn-lg btn-info" style="background-color: #000000">
2017
<span class="fa fa-github"></span> Login with GitHub
2118
</a>

resources/views/events/hosted/create.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
<div class="col">
1717

18-
{!! Form::open(['route' => ['users.hosted-events.store', Auth::user()]], ['class' => 'form']) !!}
18+
{!! Form::open(['route' => ['users.hosted.store', Auth::user()]], ['class' => 'form']) !!}
1919

2020
@include('events.hosted._form')
2121

resources/views/events/hosted/edit.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
{!! Form::model($event,
1919
[
20-
'route' => ['users.hosted-events.update', Auth::user(), $event],
20+
'route' => ['users.hosted.update', Auth::user(), $event],
2121
'method' => 'put'
2222
],
2323
['class' => 'form']) !!}

resources/views/layouts/_navbar.blade.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<li>{{ link_to_route('users.edit', 'Account Profile', ['id' => Auth::user()->id], ['class' => 'dropdown-item']) }}</li>
4545
<li>{{ link_to_route('favorites.index', 'Favorited Events', [], ['class' => 'dropdown-item']) }}</li>
4646
<li>{{ link_to_route('users.upcoming.index', 'Upcoming Events', ['user' => Auth::user()->id], ['class' => 'dropdown-item']) }}</li>
47-
<li>{{ link_to_route('users.hosted-events.index', 'Hosted Events', ['user' => Auth::user()->id], ['class' => 'dropdown-item']) }}</li>
47+
<li>{{ link_to_route('users.hosted.index', 'Hosted Events', ['user' => Auth::user()->id], ['class' => 'dropdown-item']) }}</li>
4848
<li>
4949
<a href="{{ route('logout') }}"
5050
class="dropdown-item"
@@ -60,7 +60,7 @@ class="dropdown-item"
6060
</ul>
6161
</li>
6262

63-
<li class="nav-item">{!! link_to_route('users.hosted-events.create', 'Post Event', ['user' => Auth::user()], ['class' => 'nav-link']) !!}</li>
63+
<li class="nav-item">{!! link_to_route('users.hosted.create', 'Post Event', ['user' => Auth::user()], ['class' => 'nav-link']) !!}</li>
6464
@else
6565
<li class="nav-item"><a class="nav-link" href="{{ route('login') }}">Login</a></li>
6666
<li class="nav-item"><a class="nav-link" href="{{ route('register') }}">Register</a></li>

resources/views/partials/_events_table.blade.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
</td>
5353
<td>
5454
@if(Auth::user()->id == $event->organizer->id)
55-
{!! link_to_route('users.hosted-events.edit', 'Edit Event', ['user' => Auth::user(), 'event' => $event]) !!}
55+
{!! link_to_route('users.hosted.edit', 'Edit Event', ['user' => Auth::user(), 'event' => $event]) !!}
5656
@endif
5757
</td>
5858
@endauth

routes/web.php

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22

33
Auth::routes();
4+
Route::get('auth/github', 'Auth\SocialGitHubController@redirectToProvider');
5+
Route::get('auth/github/callback', 'Auth\SocialGitHubController@handleProviderCallback');
46

57
Route::get('/', 'WelcomeController@index')->name('welcome.index');
68

@@ -15,9 +17,9 @@
1517
Route::resource('categories', 'CategoriesController');
1618
Route::resource('events', 'EventsController');
1719
Route::resource('favorites', 'FavoritesController');
18-
Route::get('users/{user}/hosted-events/{any_hosted_event}/edit', 'UserHostedEventsController@edit');
19-
Route::put('users/{user}/hosted-events/{any_hosted_event}', 'UserHostedEventsController@update');
20-
Route::resource('users.hosted-events', 'UserHostedEventsController');
20+
Route::get('users/{user}/hosted/{any_hosted_event}/edit', 'UserHostedEventsController@edit');
21+
Route::put('users/{user}/hosted/{any_hosted_event}', 'UserHostedEventsController@update');
22+
Route::resource('users.hosted', 'UserHostedEventsController');
2123
Route::resource('users.upcoming', 'UserUpcomingEventsController');
2224
Route::resource('locations', 'LocationsController');
2325
Route::resource('maps', 'MapsController');

0 commit comments

Comments
 (0)