Skip to content

Commit

Permalink
Password restore
Browse files Browse the repository at this point in the history
  • Loading branch information
carduz committed Nov 16, 2015
1 parent 8f876c4 commit 24bbdf8
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 12 deletions.
67 changes: 65 additions & 2 deletions app/Http/Controllers/Auth/PasswordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

namespace plunner\Http\Controllers\Auth;

use plunner\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Password;
use plunner\Http\Controllers\Controller;

class PasswordController extends Controller
{
Expand All @@ -18,7 +22,12 @@ class PasswordController extends Controller
|
*/

use ResetsPasswords;
use ResetsPasswords{
postEmail as postEmailTrait;
postReset as postResetTreait;
}

protected $redirectTo = '/';

/**
* Create a new password controller instance.
Expand All @@ -29,4 +38,58 @@ public function __construct()
{
$this->middleware('guest');
}

/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);

$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});

switch ($response) {
case Password::RESET_LINK_SENT:
return new JsonResponse('', 200);

case Password::INVALID_USER:
return new JsonResponse(['error' => trans($response)],422);
}
}

/**
* Reset the given user's password.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postReset(Request $request)
{
$this->validate($request, [
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);

$credentials = $request->only(
'email', 'password', 'password_confirmation', 'token'
);

$response = Password::reset($credentials, function ($user, $password) {
$this->resetPassword($user, $password);
});

switch ($response) {
case Password::PASSWORD_RESET:
return new JsonResponse('', 200);

default:
return new JsonResponse(['error' => trans($response)],422);
}
}
}
24 changes: 18 additions & 6 deletions app/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,23 @@
return view('welcome');
});*/

Route::group(['namespace' => 'Auth', 'prefix' => 'auth'], function() {
// Authentication routes...
Route::post('login', 'AuthController@postLogin');
Route::get('logout', 'AuthController@getLogout');
Route::group(['namespace' => 'Auth'], function() {

// Registration routes...
Route::post('register', 'AuthController@postRegister');
Route::group(['prefix' => 'auth'], function() {
// Authentication routes...
Route::post('login', 'AuthController@postLogin');
Route::get('logout', 'AuthController@getLogout');

// Registration routes...
Route::post('register', 'AuthController@postRegister');

});

Route::group(['prefix' => 'password'], function() {
// Password reset link request routes...
Route::post('email', 'PasswordController@postEmail');

// Password reset routes...
Route::post('reset', 'PasswordController@postReset');
});
});
4 changes: 2 additions & 2 deletions config/mail.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
|
*/

'driver' => env('MAIL_DRIVER', 'smtp'),
'driver' => env('MAIL_DRIVER', 'log'),

/*
|--------------------------------------------------------------------------
Expand Down Expand Up @@ -54,7 +54,7 @@
|
*/

'from' => ['address' => null, 'name' => null],
'from' => ['address' => '[email protected]', 'name' => 'plunner info'],

/*
|--------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions resources/views/emails/password.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Click here to reset your password: {{ url('password/reset/'.$token) }}
1 change: 1 addition & 0 deletions storage/logs/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*
!.gitignore
!.htaccess
2 changes: 2 additions & 0 deletions storage/logs/.htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
deny from all

45 changes: 43 additions & 2 deletions tests/AuthTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,56 @@ public function testErrorNewUser()

public function testLogin()
{
$response = $this->post('/auth/login', ['email'=>'[email protected]', 'password'=>'test'], ['Accept'=>'application/json']);
$response = $this->json('POST','/auth/login', ['email'=>'[email protected]', 'password'=>'test']);
$response->seeStatusCode(302);
$this->assertRedirectedTo($this->baseUrl);
}

public function testErrorLogin()
{
$response = $this->post('/auth/login', ['email'=>'[email protected]', 'password'=>'atest'], ['Accept'=>'application/json']);
$response = $this->json('POST', '/auth/login', ['email'=>'[email protected]', 'password'=>'atest']);
$response->seeStatusCode(302);
$this->assertRedirectedTo($this->baseUrl.'/auth/login');
}

public function testLogout()
{
$this->json('POST','/auth/login', ['email'=>'[email protected]', 'password'=>'test']);
$this->json('GET','/auth/logout');
$response = $this->json('POST','/auth/login', ['email'=>'[email protected]', 'password'=>'atest']);
$response->seeStatusCode(302);
$this->assertRedirectedTo($this->baseUrl.'/auth/login');
}

public function testResetPassword()
{
//perform restore request
$response = $this->json('POST','/password/email', ['email'=>'[email protected]']);
$response->seeStatusCode(200);

//get the token
$token = DB::table('password_resets')->where('email', '[email protected]')->value('token');

//perform reset with error
$response = $this->json('POST','/password/reset', ['email'=>'[email protected]', 'password_confirmation'=>'testtest', 'password'=>'testtest', 'token'=>'re'.$token]);
$response->seeStatusCode(422);

//perform correct reset
$response = $this->json('POST','/password/reset', ['email'=>'[email protected]', 'password_confirmation'=>'testtest', 'password'=>'testtest', 'token'=>$token]);
$response->seeStatusCode(200);
$this->json('GET','/auth/logout');
$response = $this->json('POST','/auth/login', ['email'=>'[email protected]', 'password'=>'test']);
$response->seeStatusCode(302);
$this->assertRedirectedTo($this->baseUrl.'/auth/login');
$response = $this->json('POST','/auth/login', ['email'=>'[email protected]', 'password'=>'testtest']);
$response->seeStatusCode(302);
$this->assertRedirectedTo($this->baseUrl);
}

public function testErrorResetPassword()
{
//perform restore request
$response = $this->json('POST', '/password/email', ['email' => '[email protected]']);
$response->seeStatusCode(422);
}
}

0 comments on commit 24bbdf8

Please sign in to comment.