这里有另一个新问题,但希望有人可以解释一下:
我正在使用带有Laravel 5的Socialite,我希望能够在用户登录后将用户重定向到网站上的页面。问题是使用
return redirect('any-path-I-put-here');
只需重定向回“社交网站/登录?code = afkjadfkjdslkfjdlkfj ...”(其中“社交网站”是指正在使用的网站,即facebook,twitter,google等)
所以,我认为发生的事情是,社交网站/合同/提供者界面中的redirect()函数覆盖了我在事后尝试的任何重定向。
为了澄清,我的路线设置正确。我已经尝试了你可以想象的每个版本的'redirect'('to','back','that',Redirect ::等等),并且我的Auth Controller调用了该方法(尽管我已经在其他地方尝试过了)同样)。
问题是,一旦我使用社交网站存储和登录用户,如何覆盖重定向()?任何帮助表示赞赏!提前谢谢。
包含相关重定向的代码是:
public function socialRedirect( $route, $status, $greeting, $user )
{
$this->auth->login( $user, true );
if( $status == 'new_user' ) {
// This is a new member. Make sure they see the welcome modal on redirect
\Session::flash( 'new_registration', true );
return redirect()->to( $route );// This is just the most recent attempt. It originated with return redirect($route);, and has been attempted every other way you can imagine as well (as mentioned above). Hardcoding (i.e., 'home') returns the exact same result. The socialite redirect always overrides anything that is put here.
}
else {
return redirect()->to( $route )->with( [ 'greeting' => $greeting ] );
}
}
...在此之前运行的SocialAuth类大约有500行,因为它必须确定用户是否存在,必要时注册新用户,显示不同场景的表单等。同时,这里是从Social Auth类发送信息的函数:
private function socialLogin( $socialUser, $goto, $provider, $status, $controller )
{
if( is_null( $goto ) ) {
$goto = 'backlot/' . $socialUser->profile->custom_url;
}
if( $status == 'new_user' ) {
return $controller->socialRedirect($goto, $status, null, $socialUser);
}
else {
// This is an existing member. Show them the welcome back status message.
$message = 'You have successfully logged in with your ' .
ucfirst( $provider ) . ' credentials.';
$greeting =
flash()->success( 'Welcome back, ' . $socialUser->username . '. ' . $message );
return $controller->socialRedirect($goto, $status, $greeting, $socialUser);
}
}
答案 0 :(得分:1)
我相信你是在思考这个问题。使用Socialite非常简单:
设置config/services.php
。对于Facebook我有这个:
'facebook' => [
'client_id' => 'your_fb_id',
'client_secret' => 'your_fb_secret',
'redirect' => '>ABSOLUTE< url to redirect after login', //like: 'http://stuff'
],
然后设置两个路由,一个用于登录,一个用于回调(登录后)。
在登录控制器方法中:
return \Socialize::with('facebook')->redirect();
然后在回调函数
中$fb_user = \Socialize::with('facebook')->user();
// check if user exists, create it and whatnot
//dd($fb_user);
return redirect()->route('some.route');
有关详细信息,请查看以下内容:http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/
对于所有其他提供商来说,它应该非常相似。
答案 1 :(得分:1)
我设法解决了这个问题,但我不确定这是否是修复它的最佳方法。与所述内容类似,我从社交媒体获得了经过身份验证的回调,但我无法将当前响应重定向到另一个网址。
根据回调请求参数,我能够在Laravel应用程序中创建和验证用户。到目前为止它运作良好,但是当我尝试return redirect()->route('dashboard');
时,在这一步之后出现了问题。我尝试了redirect()
辅助和Redirect
外观的所有风格,但没有任何帮助。
在我查看这个问题之前,空白页面只是盯着我的脸超过2天。行为非常相似。我从社交媒体重定向到我的应用程序,但无法在相同的响应周期中进一步重定向。
此时(应用程序收到回调并且用户已通过身份验证),如果我手动刷新页面(F5),我会被重定向到目标页面。我的解释类似于之前在这个问题中提到的内容。来自社交媒体回调的重定向主导了我在我的控制器中触发的重定向(可能在Laravel app中的重定向被抑制,因为来自社交媒体的重定向仍未完成)。这只是我的解释。如果他们不这么认为或者有更好的解释,专家可以投入更多的光。
要解决此问题,我使用header("Location /dashboard");
发出了原始http重定向,并将auth中间件应用于此路由。这样我可以模拟刷新功能,重定向到仪表板(或预期的URL)并检查我的DashboardController中的身份验证。
再一次,这不是一个完美的解决方案,我正在调查问题的实际根源,但如果您遇到类似问题,这可能会帮助您继续前进。
答案 2 :(得分:0)
我们在UserController中使用Socialite登录作为特征。我们简单地覆盖了控制器中的AuthenticatesSocialiteLogin :: loginSuccess()。
use Broco\SocialiteLogin\Auth\AuthenticatesSocialiteLogin;
class UserController extends BaseController
{
use AuthenticatesSocialiteLogin;
public function loginSuccess($user)
{
return redirect()->intended(url('/#login-success'));
}
....