Остерегайтесь меня на секунду, когда я пытаюсь заложить основу для моей проблемы.
Итак, я использовал веб-фреймворк python Flask почти год назад, и у него есть замечательное расширение под названием Flask-Login , которое помогает обеспечить управление пользовательскими сеансами вроде это в laravel.
Сказав все это, в Flask-Login есть определенная функция, которая обеспечивает функциональность, которая, когда пользователь не вошел или не вошел в систему и пытается получить доступ к той странице, для которой требуется аутентификация, например, /create_post
, они будут перенаправлены обратно на страницу входа, причем эта страница закодирована в строке запроса, например /login?next=%2Fcreate_post
.
Я пытаюсь реализовать ту же функцию в проекте laravel, над которым я работаю, чтобы я мог перенаправить пользователя на страницу, на которой он, вероятно, хотел сначала перейти, или на другой маршрут в случае, если строка запроса не существуют, и я не могу найти, куда поместить свой код, чтобы сделать именно это, и я не хочу возиться с чем-либо в каталоге vendor
(из-за очевидных проблем, которые идут с этим), и я попытался манипулировать подайте app/Http/Middleware/RedirectIfAuthenticated.php
, выполнив то, что ниже, но безуспешно.
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
$previous_url = url()->previous(); // how do I insert this in query string
return $next($request);
}
Придется ли мне создавать собственное промежуточное программное обеспечение или есть другой способ реализации такого рода функций в laravel?
ПРИМЕЧАНИЕ: Я не использую систему аутентификации laravel по умолчанию. Я создал свой собственный контроллер SessionsController
для обработки логинов, который содержит приведенный ниже код.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class SessionsController extends Controller
{
public function __construct()
{
$this->middleware('auth')->except(['create', 'login']);
}
public function create()
{
$data = [
'title' => 'Login',
'body_class' => 'hold-transition login-page',
];
return view('auth.login', $data);
}
public function login(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required',
]);
$user = User::checkCredentials($request->username, $request->password);
if (!$user) {
return back()->with([
'class' => 'alert-danger',
'message' => 'Please check your credentials',
]);
}
// set session active flag to true
$user->session_active = true;
$user->save();
auth()->login($user);
return redirect()->route('dashboard');
}
public function destroy()
{
$user = auth()->user();
$user->last_login = date('Y-m-d H:i:s');
$user->session_active = false;
$user->save();
auth()->logout();
return redirect()->route('login')->with([
'class' => 'alert-success',
'message' => 'You logged out successfully',
]);
}
}
Спасибо.