Skip to content

Commit 059e344

Browse files
author
Moses Esan
committed
Initial Commit - API Done
1 parent 222f1e0 commit 059e344

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+6434
-1
lines changed

.env.example

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
APP_ENV=local
2+
APP_KEY=
3+
APP_DEBUG=true
4+
APP_LOG_LEVEL=debug
5+
APP_URL=http://localhost
6+
7+
DB_CONNECTION=mysql
8+
DB_HOST=127.0.0.1
9+
DB_PORT=3306
10+
DB_DATABASE=homestead
11+
DB_USERNAME=homestead
12+
DB_PASSWORD=secret
13+
14+
CACHE_DRIVER=file
15+
SESSION_DRIVER=file
16+
QUEUE_DRIVER=sync
17+
18+
REDIS_HOST=127.0.0.1
19+
REDIS_PASSWORD=null
20+
REDIS_PORT=6379
21+
22+
MAIL_DRIVER=smtp
23+
MAIL_HOST=mailtrap.io
24+
MAIL_PORT=2525
25+
MAIL_USERNAME=null
26+
MAIL_PASSWORD=null
27+
MAIL_ENCRYPTION=null

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
* text=auto
2+
*.css linguist-vendored
3+
*.scss linguist-vendored

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/vendor
2+
/node_modules
3+
/public/storage
4+
Homestead.yaml
5+
Homestead.json
6+
.env

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# laravel-jwt-authentication
2-
Laravel 5.2 Authentication API using JWT with E-mail verification
2+
Laravel 5.2 Authentication API using JWT with E-mail verification

app/Console/Commands/Inspire.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace App\Console\Commands;
4+
5+
use Illuminate\Console\Command;
6+
use Illuminate\Foundation\Inspiring;
7+
8+
class Inspire extends Command
9+
{
10+
/**
11+
* The name and signature of the console command.
12+
*
13+
* @var string
14+
*/
15+
protected $signature = 'inspire';
16+
17+
/**
18+
* The console command description.
19+
*
20+
* @var string
21+
*/
22+
protected $description = 'Display an inspiring quote';
23+
24+
/**
25+
* Execute the console command.
26+
*
27+
* @return mixed
28+
*/
29+
public function handle()
30+
{
31+
$this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
32+
}
33+
}

app/Console/Kernel.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Console;
4+
5+
use Illuminate\Console\Scheduling\Schedule;
6+
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
7+
8+
class Kernel extends ConsoleKernel
9+
{
10+
/**
11+
* The Artisan commands provided by your application.
12+
*
13+
* @var array
14+
*/
15+
protected $commands = [
16+
// Commands\Inspire::class,
17+
];
18+
19+
/**
20+
* Define the application's command schedule.
21+
*
22+
* @param \Illuminate\Console\Scheduling\Schedule $schedule
23+
* @return void
24+
*/
25+
protected function schedule(Schedule $schedule)
26+
{
27+
// $schedule->command('inspire')
28+
// ->hourly();
29+
}
30+
}

app/Events/Event.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
abstract class Event
6+
{
7+
//
8+
}

app/Exceptions/Handler.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace App\Exceptions;
4+
5+
use Exception;
6+
use Illuminate\Validation\ValidationException;
7+
use Illuminate\Auth\Access\AuthorizationException;
8+
use Illuminate\Database\Eloquent\ModelNotFoundException;
9+
use Symfony\Component\HttpKernel\Exception\HttpException;
10+
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
11+
12+
class Handler extends ExceptionHandler
13+
{
14+
/**
15+
* A list of the exception types that should not be reported.
16+
*
17+
* @var array
18+
*/
19+
protected $dontReport = [
20+
AuthorizationException::class,
21+
HttpException::class,
22+
ModelNotFoundException::class,
23+
ValidationException::class,
24+
];
25+
26+
/**
27+
* Report or log an exception.
28+
*
29+
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
30+
*
31+
* @param \Exception $e
32+
* @return void
33+
*/
34+
public function report(Exception $e)
35+
{
36+
parent::report($e);
37+
}
38+
39+
/**
40+
* Render an exception into an HTTP response.
41+
*
42+
* @param \Illuminate\Http\Request $request
43+
* @param \Exception $e
44+
* @return \Illuminate\Http\Response
45+
*/
46+
public function render($request, Exception $e)
47+
{
48+
return parent::render($request, $e);
49+
}
50+
}
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api;
4+
5+
use Illuminate\Http\Request;
6+
7+
use App\Http\Requests;
8+
use App\Http\Controllers\Controller;
9+
10+
11+
use JWTAuth;
12+
use Tymon\JWTAuth\Exceptions\JWTException;
13+
use Validator;
14+
use App\User;
15+
use Hash, Mail;
16+
use Illuminate\Support\Facades\Password;
17+
use Illuminate\Mail\Message;
18+
19+
20+
class AuthController extends Controller
21+
{
22+
/**
23+
* API Register User
24+
*
25+
* @param Request $request
26+
*/
27+
public function register(Request $request) {
28+
$rules = [
29+
'name' => 'required|max:255',
30+
'email' => 'required|email|max:255|unique:users',
31+
'password' => 'required|confirmed|min:6',
32+
];
33+
34+
$input = $request->only(
35+
'name',
36+
'email',
37+
'password',
38+
'password_confirmation'
39+
);
40+
41+
$validator = Validator::make($input, $rules);
42+
43+
// print_r($validator) ;
44+
45+
if($validator->fails()) {
46+
$error = $validator->messages()->toJson();
47+
return response()->json(['success'=> false, 'error'=> $error]);
48+
}
49+
50+
$confirmation_code = str_random(30); //Generate confirmation code
51+
52+
$name = $input['name'];
53+
$email = $input['email'];
54+
User::create([
55+
'name' => $input['name'],
56+
'email' => $input['email'],
57+
'password' => Hash::make( $input['password']),
58+
'confirmation_code' => $confirmation_code
59+
]);
60+
61+
Mail::send('email.verify', ['confirmation_code' => $confirmation_code],
62+
function($m) use ($email, $name){
63+
$m->from('[from_email_addd]', 'Test API');
64+
$m->to($email, $name)
65+
->subject('Verify your email address');
66+
});
67+
68+
return response()->json(['success'=> true, 'message'=> 'Thanks for signing up! Please check your email.']);
69+
}
70+
71+
/**
72+
* API Confirm User
73+
*
74+
* @param Request $request
75+
*/
76+
public function confirm($confirmation_code)
77+
{
78+
if(!$confirmation_code) return "Invalid link";
79+
80+
$user = User::where('confirmation_code', $confirmation_code)->first();
81+
82+
if (!$user) return response()->json(['success'=> false, 'error'=> "User Not Found"]);
83+
84+
$user->confirmed = 1;
85+
$user->confirmation_code = null;
86+
$user->save();
87+
88+
$email =$user->email;
89+
$name =$user->name;
90+
91+
Mail::send('email.welcome', ['email' => $email, 'name' => $name],
92+
function ($m) use ($email, $name) {
93+
$m->from('[from_email_add]', 'Test API');
94+
$m->to($email, $name)->subject('Welcome To Test API');
95+
});
96+
97+
return response()->json(['success'=> true, 'message'=> 'You have successfully verified your account.']);
98+
}
99+
100+
101+
/**
102+
* API Resend Verification
103+
*
104+
* @param Request $request
105+
* @return \Illuminate\Http\JsonResponse
106+
*/
107+
public function resendVerification(Request $request)
108+
{
109+
$user = User::where('email', $request->email)->first();
110+
111+
if (!$user) return response()->json(['success'=> false, 'error'=> "Your email address was not found."]);
112+
113+
$confirmation_code = str_random(30); //Generate confirmation code
114+
$user->confirmation_code = $confirmation_code;
115+
$user->save();
116+
117+
$email =$user->email;
118+
$name =$user->name;
119+
120+
Mail::send('email.verify', ['confirmation_code' => $confirmation_code],
121+
function($m) use ($email, $name){
122+
$m->from('[from_email_add]', 'Test API');
123+
$m->to($email, $name)
124+
->subject('Verify your email address');
125+
});
126+
127+
return response()->json(['success'=> true, 'message'=> 'A new verification email has been sent! Please check your email.']);
128+
}
129+
130+
/**
131+
* API Resend Verification
132+
*
133+
* @param Request $request
134+
* @return \Illuminate\Http\JsonResponse
135+
*/
136+
public function recoverPassword(Request $request)
137+
{
138+
$user = User::where('email', $request->email)->first();
139+
140+
if (!$user) return response()->json(['success'=> false, 'error'=> "Your email address was not found."]);
141+
142+
Password::sendResetLink($request->only('email'), function (Message $message) {
143+
$message->subject('Your Password Reset Link');
144+
145+
});
146+
147+
return response()->json(['success'=> true, 'message'=> 'A reset email has been sent! Please check your email.']);
148+
}
149+
150+
/**
151+
* API Login, on success return JWT Auth token
152+
*
153+
* @param Request $request
154+
* @return \Illuminate\Http\JsonResponse
155+
*/
156+
public function login(Request $request)
157+
{
158+
// $credentials = $request->only('email', 'password');
159+
160+
$credentials = [
161+
'email' => $request->email,
162+
'password' => $request->password,
163+
'confirmed' => 1
164+
];
165+
166+
try {
167+
// attempt to verify the credentials and create a token for the user
168+
if (! $token = JWTAuth::attempt($credentials)) {
169+
return response()->json(['success' => false, 'error' => 'Invalid Credentials. Please make sure you entered the right information and you have verified your account. '], 401);
170+
}
171+
} catch (JWTException $e) {
172+
// something went wrong whilst attempting to encode the token
173+
return response()->json(['success' => false, 'error' => 'could_not_create_token'], 500);
174+
}
175+
176+
// all good so return the token
177+
return response()->json(compact('token'));
178+
}
179+
180+
/**
181+
* Log out
182+
* Invalidate the token, so user cannot use it anymore
183+
* They have to relogin to get a new token
184+
*
185+
* @param Request $request
186+
*/
187+
public function logout(Request $request) {
188+
$this->validate($request, [
189+
'token' => 'required'
190+
]);
191+
192+
JWTAuth::invalidate($request->input('token'));
193+
}
194+
195+
}

0 commit comments

Comments
 (0)