Skip to content

Instantly share code, notes, and snippets.

@trovster
Created October 28, 2015 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save trovster/c7ec8c77c4b3aca0af4c to your computer and use it in GitHub Desktop.
Save trovster/c7ec8c77c4b3aca0af4c to your computer and use it in GitHub Desktop.
Laravel 5.1 Auth functionality.
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Password;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use App\Http\Controllers\Controller;
use App\Model\User\User;
use App\Http\Requests\AuthLoginRequest;
use App\Http\Requests\AuthReminderRequest;
use App\Http\Requests\AuthResetRequest;
class AuthController extends Controller
{
use ThrottlesLogins;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
/**
* Index
*
* @param Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
return redirect()->route('login');
}
/**
* Login
*
* @param Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function login(Request $request)
{
return response()->view('auth/login');
}
/**
* Login (POST)
*
* @param App\Http\Requests\AuthLoginRequest $request
* @return \Illuminate\Http\Response
*/
public function login_post(AuthLoginRequest $request)
{
if($this->hasTooManyLoginAttempts($request)) {
return $this->sendLockoutResponse($request);
}
$credentials = $this->getCredentials($request);
if(Auth::attempt($credentials, $request->has('remember'))) {
return $this->handleUserWasAuthenticated($request, true);
}
$this->incrementLoginAttempts($request);
return redirect($this->loginPath())
->withInput($request->only($this->loginUsername(), 'remember'))
->withErrors([
$this->loginUsername() => $this->getFailedLoginMessage(),
]);
}
/**
* Logout
*
* @param Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
Auth::logout();
return redirect()->route('login')->with('message', trans('auth.logged_out'))->with('success', true);
}
/**
* Password reminder
*
* @param Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function password_reminder(Request $request)
{
return response()->view('auth/password_reminder');
}
/**
* Password reminder (POST)
*
* @param App\Http\Requests\AuthReminderRequest $request
* @return \Illuminate\Http\Response
*/
public function password_reminder_post(AuthReminderRequest $request)
{
$user = User::where('username', '=', $request->input('username'))->where('email', '=', $request->input('email'))->first();
if (!$user) {
return redirect()->route('password-reminder')
->withInput($request->only('username', 'email'))
->withErrors([])
->with('message', trans('passwords.user'))
->with('success', false);
}
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject('Password Reset');
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->route('login')->with('message', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
/**
* Password reset
*
* @param Illuminate\Http\Request $request
* @param string $token
* @return \Illuminate\Http\Response
*/
public function password_reset(Request $request, $token)
{
return response()->view('auth/password_reset', [
'token' => $token
]);
}
/**
* Password reset (POST)
*
* @param App\Http\Requests\AuthResetRequest $request
* @return \Illuminate\Http\Response
*/
public function password_reset_post(AuthResetRequest $request, $token)
{
if($token !== $request->input('token__form')) {
abort(400, 'Tokens do not match.');
}
$user = User::where('username', '=', $request->input('username'))->where('email', '=', $request->input('email'))->first();
if (!$user) {
return redirect()->route('password-reminder')
->withInput($request->only('username', 'email'))
->withErrors([])
->with('message', trans('passwords.user'))
->with('success', false);
}
$response = Password::reset($request->only('email', 'password', 'password_confirmation') + array('token' => $token), function ($user, $password) {
$user->password = $password;
$user->save();
});
switch ($response) {
case Password::PASSWORD_RESET:
return redirect()->route('login')->with('message', 'You have reset your password.')->with('success', true);
break;
default:
return redirect()->back()->withInput($request->only('username', 'email'))->withErrors(['email' => trans($response)]);
break;
}
}
/**
* Get the path to the login route.
*
* @return string
*/
public function loginPath()
{
return '/login';
}
/**
* Get the post register / login redirect path.
*
* @return string
*/
public function redirectPath()
{
return '/admin';
}
/**
* Get the login to be used by the controller.
*
* @return string
*/
public function loginUsername()
{
return 'email';
}
/**
* Get the failed login message.
*
* @return string
*/
protected function getFailedLoginMessage()
{
return trans('auth.failed');
}
/**
* Send the response after the user was authenticated.
*
* @param App\Http\Requests\AuthLoginRequest $request
* @param bool $throttles
* @return \Illuminate\Http\Response
*/
protected function handleUserWasAuthenticated(AuthLoginRequest $request, $throttles)
{
if ($throttles) {
$this->clearLoginAttempts($request);
}
if (method_exists($this, 'authenticated')) {
return $this->authenticated($request, Auth::user());
}
return redirect()->intended($this->redirectPath())->with('message', trans('auth.logged_in'))->with('success', true);
}
/**
* Get the needed authorization credentials from the request.
*
* @param App\Http\Requests\AuthLoginRequest $request
* @return array
*/
protected function getCredentials(AuthLoginRequest $request)
{
return $request->only($this->loginUsername(), 'password');
}
}
<?php
Route::get('/', [
'as' => 'root',
'uses' => 'Auth\AuthController@index'
]);
Route::get('login', [
'as' => 'login',
'uses' => 'Auth\AuthController@login'
]);
Route::post('login', [
'as' => 'login.try',
'uses' => 'Auth\AuthController@login_post'
]);
Route::post('logout', [
'as' => 'logout',
'uses' => 'Auth\AuthController@logout'
]);
Route::get('password-reminder', [
'as' => 'password-reminder',
'uses' => 'Auth\AuthController@password_reminder'
]);
Route::post('password-reminder', [
'as' => 'password-reminder.try',
'uses' => 'Auth\AuthController@password_reminder_post'
]);
Route::get('password-reset/{token}', [
'as' => 'password-reset',
'uses' => 'Auth\AuthController@password_reset'
])->where('token', '[A-Za-z0-9]{16,}');
Route::post('password-reset/{token}', [
'as' => 'password-reset.try',
'uses' => 'Auth\AuthController@password_reset_post'
])->where('token', '[A-Za-z0-9]{16,}');
Route::group(['namespace' => 'Admin', 'as' => 'admin::', 'prefix' => 'admin', 'middleware' => 'auth'], function ()
{
Route::get('/', [
'as' => 'index',
'uses' => 'AdminController@index'
]);
Route::get('dashboard', [
'as' => 'dashboard',
'uses' => 'AdminController@dashboard'
]);
Route::resource('user', 'UserController');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment