laravel - 登录后如何将用户重定向到来自 laravel 7 的相同路由?
问题描述
我有一张支付卡。它底部有一个链接,可将访客用户引导至登录页面。我希望用户在登录后再次重定向到卡支付路线。你能帮我吗?我该怎么做?顺便说一句,我是 laravel 的新手。谢谢你们的时间:X 这里是 loginController.php:
<?php
namespace App\Http\Controllers\Auth;
use App\Events\LoginLogged;
use App\Rules\Recaptcha;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/admin/dashboard';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('throttle:3,1')->only('login');
}
/**
* Attempt to log the user into the application.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
protected function validateLogin(Request $request)
{
$request->validate([
$this->username() => 'required|string',
'password' => 'required|string',
//'g-recaptcha-response' => ['required', new Recaptcha]
]);
}
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return array_merge(($request->only($this->username(), 'password')), ['usr_is_admin' => 1]);
}
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'usr_name';
}
protected function authenticated(Request $request, $user)
{
event(new LoginLogged($request, $user));
}
}
这是redirectIfAuthenticated.php 中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->route('dashboard');
}
return $next($request);
}
}
解决方案
重定向器上的intended
方法将用户重定向到他们试图访问的 URL,然后被身份验证中间件拦截。如果预期的目的地不可用,则可以为此方法提供后备 URI。例如 :
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
推荐阅读
- javascript - nextjs swr 语法说明
- makefile - 将单个 Makefile 目标规则应用于多个输入文件
- javascript - 为什么使用 fetch 发送数据时 $_POST 为空?
- c++ - 来自 SPOJ 的探险问题。使用堆数据结构
- aws-amplify - 修改自定义请求标头 AWS Amplify
- go - Azure Pipeline cannot execute command after go get
- sql - 我想按“Concept_CKI”列对表进行分组,但在最终输出中只需要“描述”列和“总列”的总和
- reactjs - 如何在安装 chakra-ui 和 react 应用程序时修复这些错误?
- scala - 根据给定地图中的值对字符串列表进行排序
- javascript - React Leaflet - 标记图像无法加载