我有一个标准的Laravel 5.6全新安装。
对于网络用户,我希望他们能够像往常一样在/login
登录并将它们重定向到他们的用户仪表板 - 一切都很好。
然而,我正在开发Electron的东西,我想在登录后从Laravel网站上刮掉一些东西,然后我想要关闭窗口,所以,我希望有一种方法可以传递一个GET参数,如/login?app=true
这将带我到另一条路线而不是仪表板。
我无法在会话中设置任何内容。我能做的最多就是在Electron中操作登录页面的DOM。
有任何想法吗?
首先,我开始通过更改use AuthenticatesUsers
trait调用来使用自定义创建的调用,这是在同一名称空间中定义的 - 当然我从类的顶部删除了使用。
我有点'扩展'我想的特性,只是听一个具有特定名称的输入,以确定返回哪条路线。至于添加输入,我在加载窗口时在我的Electron应用程序中预加载了一些JS来附加输入及其值。
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
trait AuthenticatesUsers
{
use \Illuminate\Foundation\Auth\AuthenticatesUsers {
\Illuminate\Foundation\Auth\AuthenticatesUsers::login as parentLogin;
}
private $newRouteUrl = '/newroute';
public function login(Request $request)
{
$this->validateLogin($request);
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
if ($request->input('newRouteIdentifierInput')) {
return $this->sendNewRouteResponse($request);
}
return $this->sendLoginResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
protected function sendNewRouteResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->newRouteUrl);
}
}
您可以在LoginController中使用authenticated()
方法;
public function authenticated(Request $request, $user)
{
if($request->get("app")==false)
return redirect("url");
if($request->get("app")==true)
return redirect("another-url");
return redirect("dashboard")
}