Php 如何在Laravel中注册后将用户重定向到上一个URL

Php 如何在Laravel中注册后将用户重定向到上一个URL,php,laravel,authentication,Php,Laravel,Authentication,使用Laravel 5.6中的内置身份验证系统,我的网站上有多个页面,需要用户注册或登录以执行购买等操作 我让我的登录重定向回用户登录前所在的上一页,但似乎无法使其与注册一起工作 我正在寻找的示例: //protected $redirectTo = '/'; (Originally Returning Back To Home) //WHAT I'M USING NOW TO TRY AND REDIRECT BACK TO PREVIOUS PAGE protected func

使用Laravel 5.6中的内置身份验证系统,我的网站上有多个页面,需要用户注册或登录以执行购买等操作

我让我的登录重定向回用户登录前所在的上一页,但似乎无法使其与注册一起工作

我正在寻找的示例:

//protected $redirectTo = '/'; (Originally Returning Back To Home)

//WHAT I'M USING NOW TO TRY AND REDIRECT BACK TO PREVIOUS PAGE

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

// Guards/Redirects user to home if logged in and tries to access register page again.

    public function __construct()
    {
        $this->middleware('guest');
    } 


// If users email exists in my transaction database, I show them a Thank you message upon registering. And Still want to redirect them back to previous page.

    public function registered($request, $user) {
        $where = [
            ['customer_email', $user->email],
            ['user_id', null],
        ];

        if (Transaction::where($where)->exists()) {
            Transaction::where($where)->update(['user_id' => $user->id]);

            return url()->previous()
                ->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
        }
    }
  • 用户从第X页单击“注册”
  • 用户进入注册页面
  • 然后,用户被重定向回第X页,而不是主页
  • 用户总是被重定向回以前所在的页面
  • 这是我的RegisterController.php:

    //protected $redirectTo = '/'; (Originally Returning Back To Home)
    
    //WHAT I'M USING NOW TO TRY AND REDIRECT BACK TO PREVIOUS PAGE
    
        protected function redirectTo()
        {
        return url()->previous();
        }
    
    // Guards/Redirects user to home if logged in and tries to access register page again.
    
        public function __construct()
        {
            $this->middleware('guest');
        } 
    
    
    // If users email exists in my transaction database, I show them a Thank you message upon registering. And Still want to redirect them back to previous page.
    
        public function registered($request, $user) {
            $where = [
                ['customer_email', $user->email],
                ['user_id', null],
            ];
    
            if (Transaction::where($where)->exists()) {
                Transaction::where($where)->update(['user_id' => $user->id]);
    
                return url()->previous()
                    ->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
            }
        }
    
    下面是我如何在使用登录控制器时得到这个结果的,但是没有使用注册控制器

    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'));      
    }
    
    

    如果您有任何帮助,我们将不胜感激。

    好的,您可以用与登录控制器类似的方式进行操作

    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'));      
    }
    
    
    您首先需要在Register Controller中创建以下函数,以覆盖默认值并将URL保存到会话中

    /**
    * Show the application registration form.
    *
    * @return \Illuminate\Http\Response
    */
    public function showRegistrationForm()
    {
        if (session('link')) {
            $myPath     = session('link');
            $registerPath  = url('/register');
            $previous   = url()->previous();
    
            if ($previous = $registerPath) {
                session(['link' => $myPath]);
            }else{
                session(['link' => $previous]);
            }
        } else{
            session(['link' => url()->previous()]);
        }
        return view('auth.register');
    }
    
    然后再次在注册控制器中创建以下函数

    protected function redirectTo()
    {
        return redirect(session('link'))->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
    }
    
    您可能还希望在其中设置默认路由,以防他们直接访问注册表表单。所以

    protected function redirectTo()
    {
        if(session('link')){
            return redirect(session('link'))->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
        }
        return redirect('/home')->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
    }
    

    你说的链接是重复的,这是我用来让登录正确重定向回上一页的链接。我想问的是,注册后我如何为用户做同样的事情。页面X只是一个视图吗?您是否向其传递了任何数据?因此,根据您所说的,用户位于/page1,然后转到/register并填写注册并提交。如果注册成功,您希望他们返回到/page1?@ColinMD是的,这是正确的。无论用户从哪个页面访问注册页面,都是我希望他们返回的页面。@UkraineInTheMembrane是的,第X页只是一个视图。关于我们的示例视图/页面。我正在通过数据库和foreach循环将数据传递到我的大多数页面。没问题,很高兴我能帮助hi ColinMd,我使用的代码完全相同,在提交注册表时出现了这个错误。ErrorException标头不能包含多个标头,新行检测到,知道原因吗?感谢您发现,您不能在函数redirectTo()中使用redirect,您可以返回'home';