Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Проблема такова, если удалить сессию, и зайти в админ зону кидает на /login, и сделать иной ридерект не представляется возможным.
далее следует версия ларавел 5.3 (тоже самое и на 5.2)
вот код:
class AdminLocController extends Controller
{
protected $redirectPath = '/abc';
public function Index()
{
return "Hello Admin!";
}
}
class AuthController extends Controller
{
protected $redirectPath = 'auth/querty';
protected $redirectTo = 'auth/asdfg';
protected $loginPath = 'auth/zxcvb';
protected $redirectAfterLogout = 'auth/poiuy';
public function __construct()
{
//$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
public function GetLogin()
{
return view('auth/login');
}
public function postLogin(Request $request)
{
Auth::logout();
$v = $this->RuleLogin($request->all());
if($v->fails())
{
return redirect()->back();
}
if(Auth::attempt(['login' => $request->input('login'), 'password' => $request->input('password')], true))
{
$key = auth()->getRecallerName();
Cookie::queue($key, Cookie::get($key), 60);
return redirect()->intended('/adminzone');
}
return redirect()->back();
}
public function Logout()
{
Auth::logout();
}
protected function RuleLogin(array $data)
{
return Validator::make($data, ['login' =>'required|alpha_num|between:2,12','password'=>'required|alpha_num|between:2,12',]);
}
}
Route::group(['prefix' => 'adminzone', 'middleware' => 'auth:web'], function(){
Route::get('/', 'AdminLocController@Index');
});
Route::get('/auth/logout', 'Auth\AuthController@Logout');
Route::get('/auth/login', 'Auth\AuthController@getLogin');
Route::post('/auth/login', 'Auth\AuthController@postLogin');
Route::get('/a/{login}/{password}', 'DocumentationController@GetAllModules');
Route::get('/h', 'DocumentationController@Index');
Route::get('/', function () {
return view('welcome');
});
Вредный кусок кода порождающий проблему:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest('login');
}
}
1) Не понятно что ты хочешь сделать.
2) "Вредный кусок" находится в файле который никто не мешает тебе отредактировать.
Не в сети
1 хочу редирект на другой урл.
2 мишает мне его отредактировать laravel.
Ибо завтра грядет laravel 6, или что то там. А вместо красивой composer update, будет поход за средством от гемороя.
Ребята вопрос еще актуален. Неужели не кто не сталкивался с этой проблемой ???
заткни /home роутом с перманентным редиректом.
и не трогай ничего, если не хочешь лечиться от гемора.
Изменено hzone (12.10.2016 16:20:12)
Не в сети
Не понял тебя.
Не в сети
Меня вот еще мучает вопрос, а как-то можно редиректить в зависимости от роли? Админов в админку, пользователей на сайт.
В 5.3 переопредели в контроллере Auth\LoginController.php, метод sendLoginResponse(). Скопируй оригинальный метод, но в конец измени на что-то вроде:
return redirect(auth()->user()->isAdmin() ? 'admin' : '/');
Не в сети
kamwork пишет:Меня вот еще мучает вопрос, а как-то можно редиректить в зависимости от роли? Админов в админку, пользователей на сайт.
В 5.3 переопредели в контроллере Auth\LoginController.php, метод sendLoginResponse(). Скопируй оригинальный метод, но в конец измени на что-то вроде:
return redirect(auth()->user()->isAdmin() ? 'admin' : '/');
Спасибо! Сделал без переноса всего метода, все работает.
Добавил в LoginController.php, не перенося весь метод:
protected function sendLoginResponse()
{
return redirect(auth()->user()->hasRole(['superadministrator', 'administrator', 'partner']) ? '/admin' : '/');
}
Работает, но не уверен, что верно сделал, исходный класс выглядит так:
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}
Стоит ли переносить ?
$request->session()->regenerate();
$this->clearLoginAttempts($request);
И не должен ли return выглядеть:
return $this->authenticated($request, $this->guard()->user()->hasRole(['superadministrator', 'administrator', 'partner']))
? '/admin' : '/');
Изменено kamwork (25.10.2016 13:24:07)
Не в сети
Страницы 1