all.我只是尝试使用Laravel和护照应用程序实现单点登录服务器。
我正在尝试实现的目标:侦听来自客户端的请求并根据请求的参数提供身份验证的单点登录服务器。
到目前为止,我所取得的成就是:仅当用户已在 SSO 服务器上注册时,才会侦听客户端请求并提供身份验证并重定向回客户端站点的 SSO 服务器。
当用户未在SSO服务器上注册并尝试注册帐户时,问题就出现了 在这种情况下,Laravel注册用户并重定向回主页而不是客户端回调URL。请让我知道这是否可以在Laravel中实现,或者有人为此做了一些特别的事情。
这几乎是可以实现的,这取决于你想为此付出多少努力。
当用户注册时,您可以在会话中保存回调 URL。
session(['callback' => $callback]);
注册后,将用户重定向到其回调 URL
return redirect()->away(session('callback'));
如果您仍在使用laravel提供的默认Auth/RegisterController,则可以通过定义自定义重定向函数来更改重定向行为
protected function redirectTo()
{
return redirect()->away(session('callback'));
}
拉拉维尔会自动捡起它。
不要忘记删除属性
protected $redirectTo = '/home';
是的,您可以通过默认注册功能中的一些自定义来执行此操作,您必须替换注册控制器中的一些代码,如下所示:
app\Http\Controllers\Auth\RegistrationController
使用 Illuminate\Foundation\Auth\AuthenticatesUsers;
use AuthenticatesUsers, RegistersUsers {
AuthenticatesUsers::redirectPath insteadof RegistersUsers;
AuthenticatesUsers::guard insteadof RegistersUsers;
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
if ($this->attemptLogin($request)) {
if ($request->hasSession()) {
$request->session()->put('auth.password_confirmed_at', time());
}
return $this->sendLoginResponse($request);
}
}