Browse Source

修复登录成功后无法返回之前页的BUG

Karson 7 years ago
parent
commit
d07a642a2d

+ 18 - 5
application/index/controller/User.php

@@ -67,7 +67,7 @@ class User extends Frontend
      */
     public function register()
     {
-        $url = $this->request->request('url', url('user/index'));
+        $url = $this->request->request('url');
         if ($this->auth->id)
             $this->success(__('You\'ve logged in, do not login again'), $url);
         if ($this->request->isPost()) {
@@ -116,12 +116,18 @@ class User extends Frontend
                     $uc = new \addons\ucenter\library\client\Client();
                     $synchtml = $uc->uc_user_synregister($this->auth->id, $password);
                 }
-                $this->success(__('Sign up successful') . $synchtml, $url);
+                $this->success(__('Sign up successful') . $synchtml, $url ? $url : url('user/index'));
             } else {
                 $this->error($this->auth->getError());
             }
         }
-        Session::set('redirect_url', $url);
+        //判断来源
+        $referer = $this->request->server('HTTP_REFERER');
+        if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host()))
+            && !preg_match("/(user\/login|user\/register)/i", $referer)) {
+            $url = $referer;
+        }
+        $this->view->assign('url', $url);
         $this->view->assign('title', __('Register'));
         return $this->view->fetch();
     }
@@ -131,7 +137,7 @@ class User extends Frontend
      */
     public function login()
     {
-        $url = $this->request->request('url', url('user/index'));
+        $url = $this->request->request('url');
         if ($this->auth->id)
             $this->success(__('You\'ve logged in, do not login again'), $url);
         if ($this->request->isPost()) {
@@ -169,11 +175,18 @@ class User extends Frontend
                     $uc = new \addons\ucenter\library\client\Client();
                     $synchtml = $uc->uc_user_synlogin($this->auth->id);
                 }
-                $this->success(__('Logged in successful') . $synchtml, $url);
+                $this->success(__('Logged in successful') . $synchtml, $url ? $url : url('user/index'));
             } else {
                 $this->error($this->auth->getError());
             }
         }
+        //判断来源
+        $referer = $this->request->server('HTTP_REFERER');
+        if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host()))
+            && !preg_match("/(user\/login|user\/register)/i", $referer)) {
+            $url = $referer;
+        }
+        $this->view->assign('url', $url);
         $this->view->assign('title', __('Login'));
         return $this->view->fetch();
     }

+ 1 - 0
application/index/view/user/login.html

@@ -3,6 +3,7 @@
         <div class="logon-tab clearfix"> <a class="active">{:__('Sign in')}</a> <a href="{:url('user/register')}">{:__('Sign up')}</a> </div>
         <div class="login-main"> 
             <form name="form" id="login-form" class="form-vertical" method="POST" action="">
+                <input type="hidden" name="url" value="{$url}" />
                 <div class="form-group">
                     <label class="control-label" for="account">{:__('Account')}</label>
                     <div class="controls">

+ 1 - 0
application/index/view/user/register.html

@@ -4,6 +4,7 @@
         <div class="login-main"> 
             <form name="form1" id="register-form" class="form-vertical" method="POST" action="">
                 <input type="hidden" name="invite_user_id" value="0" />
+                <input type="hidden" name="url" value="{$url}" />
                 <div class="form-group">
                     <label class="control-label required">{:__('Email')}<span class="text-success"></span></label>
                     <div class="controls">