Php Laravel 5-登录后重定向回上一页

Php Laravel 5-登录后重定向回上一页,php,laravel-5,Php,Laravel 5,我有一个页面,上面有一些内容和评论部分。评论只能由已登录的用户留下,因此我在页面中添加了一个登录表单供用户登录(仅当用户尚未登录时显示) 我遇到的问题是,当用户登录时,他们会被重定向回主页,而不是以前的页面 我没有更改开箱即用设置的登录方法 任何人都可以建议一个简单的方法来设置重定向url。我的想法是,能够将其设置为表单将是一件好事。查看 和使用: URL::previous(); 转到上一页。您可以使用Laravel 5的重定向返回: <?php namespace App\Http\

我有一个页面,上面有一些内容和评论部分。评论只能由已登录的用户留下,因此我在页面中添加了一个登录表单供用户登录(仅当用户尚未登录时显示)

我遇到的问题是,当用户登录时,他们会被重定向回主页,而不是以前的页面

我没有更改开箱即用设置的登录方法

任何人都可以建议一个简单的方法来设置重定向url。我的想法是,能够将其设置为表单将是一件好事。

查看

和使用:

URL::previous();

转到上一页。

您可以使用Laravel 5的重定向返回:

<?php namespace App\Http\Controllers;

use Redirect;   
class SomeController extends Controller { 
    public function some_method() {
       return Redirect::back()
    }
}
请在Laravel 5.1中改用
重定向()->预期()


您还可以在此处查看更多信息:

laravel 5.3的解决方案:

在loginController中,将showLoginForm()函数覆盖为以下函数:

public function showLoginForm()
{
    if(!session()->has('url.intended'))
    {
        session(['url.intended' => url()->previous()]);
    }
    return view('auth.login');    
}
它将设置“url.designed”会话变量,即laravel用于查找登录后要重定向的页面的变量,该变量使用以前的url


它还检查变量是否已设置,以避免在用户提交表单时出现错误时使用登录url设置变量。

对于Laravel 5.3

内部
App/Http/Controllers/Auth/LoginController
将此行添加到
\u construct()
函数

$this->redirectTo = url()->previous();
因此,完整的代码将是

public function __construct()
{
    $this->redirectTo = url()->previous();
    $this->middleware('guest', ['except' => 'logout']);
}
它对我来说就像一个符咒我正在使用laravel 5.3.30

使用Thss


return Redirect::back('back-url')对于Laravel 5.4,下面的代码只需更新LoginController.php就可以了

use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;


public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
    Session::put('backUrl', URL::previous());
}


public function redirectTo()
{
    return Session::get('backUrl') ? Session::get('backUrl') :   $this->redirectTo;
}
public function showLoginForm()
{
    session(['link' => url()->previous()]);
    return view('auth.login');
}


protected function authenticated(Request $request, $user)
{
    return redirect(session('link'));
}

对于Laravel5.5,下面的代码只需更新LoginController.php即可

use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;


public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
    Session::put('backUrl', URL::previous());
}


public function redirectTo()
{
    return Session::get('backUrl') ? Session::get('backUrl') :   $this->redirectTo;
}
public function showLoginForm()
{
    session(['link' => url()->previous()]);
    return view('auth.login');
}


protected function authenticated(Request $request, $user)
{
    return redirect(session('link'));
}

重定向到以当前页面url作为查询字符串登录:

<a href="{{ url('login?redirect_to=' . urlencode(request()->url())) }}">login</a>

Laravel 5

(也可能是6,未测试,如果有人知道,请更新答案)

将此添加到
LoginController

protected function redirectTo(){
    return url()->previous();
}

注意:如果出现字段
$redirectTo
,请将其从Laravel 5.6中删除,当用户插入错误的凭据时,登录页面将重新加载和会话(['link'=>url()->previous()]);将采用链接变量中的登录URL。因此,如果登录成功,用户将再次重定向到登录页面或重定向到/home。所以,为了避免这些代码为我工作!之后,无论用户插入错误凭证的时间有多长,他都会在登录后重定向到登录页面之前的位置

更新或覆盖LoginController中的公共函数showLoginForm()

public function showLoginForm()
{
    if (session('link')) {
        $myPath     = session('link');
        $loginPath  = url('/login');
        $previous   = url()->previous();

        if ($previous = $loginPath) {
            session(['link' => $myPath]);
        }
        else{
            session(['link' => $previous]);
        }
    }
    else{
         session(['link' => url()->previous()]);
    }

    return view('auth.login');
}
protected function authenticated(Request $request, $user)
{     
    return redirect(session('link'));      
}
另外,在LoginController中更新或覆盖经过身份验证的受保护函数(Request$Request$user)

public function showLoginForm()
{
    if (session('link')) {
        $myPath     = session('link');
        $loginPath  = url('/login');
        $previous   = url()->previous();

        if ($previous = $loginPath) {
            session(['link' => $myPath]);
        }
        else{
            session(['link' => $previous]);
        }
    }
    else{
         session(['link' => url()->previous()]);
    }

    return view('auth.login');
}
protected function authenticated(Request $request, $user)
{     
    return redirect(session('link'));      
}

在RedirectIfAuthenticated.php中更改此代码

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect()->intended('/contactus');
        }

        return $next($request);
    }
请通知:

return redirect()->intended('/contactus');

如果您希望始终重定向到
/home
,除了那些带有注释的页面之外,那么您应该覆盖LoginController中的
重定向到
方法:

public function redirectTo()
{
     return session('url.intended') ?? $this->redirectTo;
}
在希望保留在站点上的所有页面上,您应在会话中存储一个请求的url:

public function show(Category $category, Project $project){
   // ...

   session()->flash('url.intended' , '/' . request()->path());
}

在模板文件中,您只需使用:

{{ url()->previous() }}
要从控制器重定向,应使用

return redirect()->back(); 
或者只是

return back();


尽管这里的答案暗示了拉威尔4号,但我确信它在5号仍然有效。嗯,Laravel4和3并没有像Laravel5那样与可认证的合同一起使用,我认为这些都不相关。类似的问题解决得很好。Laravel 5.5的解决方案,下面的链接感谢您的回答,这很好——但为了实现这一点,您似乎必须在要重定向回的页面中“包括”登录表单。进入
your.app/login
登录只会将您重定向回
'/home'
页面。在登录时出现身份验证错误后,这将无法像魔咒一样使用Laravel 5.5。成功登录后,它会重定向到登录表单。这对我来说很有效,因为我在重定向到登录的会话中设置了
url.destined
:session::put('url.destined',\url::full())@也许你能帮我。看看这个,;最好在这里回答!我使用了以下代码:return redirect()->designed(route('user.dashboard');但在此之前,Laravel显示了一个403错误页面,没有任何操作。相反,如何自动重定向到登录页面,然后再重定向到预期页面?也许您可以帮助我。看看这个,@谢谢你的通知。我更新了链接。现在这就是所谓的最好的jugad(把戏)之一,因为它总是工作。这确实很好,谢谢!然而,我确实认为这是同一想法的一个稍微简单的版本。工作得非常好!非常感谢:)为我工作,谢谢。为我工作。必须添加类
使用light\Http\Request非常有用,因为有JavaScript,我希望在登录后总是重定向到特定页面,这样一些路由就不会因为缺少依赖关系而失败。这个提示可以帮助我。非常感谢不知道为什么,但这似乎对Safarit不起作用这是最简单、最快的方法。你不需要删除它。函数redirectTo()优先于变量$redirectTo,因此可能同样是一个退步,尤其是当第一页用户访问是登录页时。这就是“后退”方法的工作原理:这是laravel5.3我不认为是这样,伙计。