2016-03-16 150 views
0

我是PHP和MySql的新手。請原諒我,如果我傻PHP重定向用戶如果登錄

我開發我的UserSpice登錄管理框架的頂部項目一個Web應用程序

現在,我創建了一個登錄表單。登錄時將重定向到作爲引導管理模板的儀表板。

我的登錄頁面是

本地主機/ myproject的/ index.php文件

我的儀表板頁面

本地主機/ myproject的/ account.php

現在會發生什麼,登錄後我可以看到d ashboard,假設未註銷,如果我的網址更改爲

本地主機/ myproject的

則顯示登錄表單,而不是重定向到我的account.php。但在同一時間,如果該URL又變成

本地主機/ myproject的/ account.php

沒有要求我重新登錄進入成功地採取了會議。

我過其他方式檢查現在像我登出,並試圖直接輸入到

本地主機/ myproject的/ account.php

現在沒有考慮我在它邏輯上要讓我登錄因爲我已經登出。

什麼,我想是如果我登錄,我想自動重定向到account.php

,因爲我使用的是用戶管理框架,我認爲它會採取照顧,但這個問題我現在面臨。我有點挖,並在框架中發現以下代碼,檢查用戶是否沒有登錄它將重定向到index.php,但它不檢查是否它已登錄,那麼它應該去account.php 。

//If page does not exist in DB, allow access 
    if (empty($pageDetails)){ 
     return true; 
    } 
    //If page is public, allow access 
    elseif ($pageDetails['private'] == 0) { 
     return true; 
    } 
    //If user is not logged in, deny access 
    elseif(!$user->isLoggedIn()) 
    { 
     Redirect::to(env('client').'index.php'); 
     return false; 
    } 

    else { 
     //Retrieve list of permission levels with access to page 

     $query = $db->query("SELECT permission_id FROM permission_page_matches WHERE page_id = ?",[$pageID]); 

     $permission = $query->results(); 
     $pagePermissions[] = $permission; 

     //Check if user's permission levels allow access to page 
     if (checkPermission($pagePermissions)){ 
     return true; 
     } 
     //Grant access if master user 
     elseif ($user->data()->id == $master_account){ 
     return true; 
     } 
     else { 
     Redirect::to("index.php"); 
     return false; 
     } 
    } 

我試圖在添加以下代碼

elseif(!$user->isLoggedIn()) 
     { 
      Redirect::to(env('client').'index.php'); 
      return false; 
     } 
elseif($user->isLoggedIn()) 
     { 
      Redirect::to(env('client').'account.php'); 
      return true; 
     } 

但是,這並不能幫助我。請幫助我重定向到account.php,如果用戶已經登錄並且意外更改了url登錄形式。

UPDATE:(表演@DanHoover溶液後)

按照由@DanHoover我vardump用戶的建議。

如果我退出我得到以下轉儲

object(User)#3 (5) { 
    ["_db":"User":private]=> 
    object(DB)#4 (7) { 
    ["_pdo":"DB":private]=> 
    object(PDO)#5 (0) { 
    } 
    ["_query":"DB":private]=> 
    object(PDOStatement)#6 (1) { 
     ["queryString"]=> 
     string(50) "SELECT id, page, private FROM pages WHERE page = ?" 
    } 
    ["_error":"DB":private]=> 
    bool(false) 
    ["_results":"DB":private]=> 
    array(1) { 
     [0]=> 
     object(stdClass)#7 (3) { 
     ["id"]=> 
     string(2) "13" 
     ["page"]=> 
     string(9) "index.php" 
     ["private"]=> 
     string(1) "0" 
     } 
    } 
    ["_resultsArray":"DB":private]=> 
    array(1) { 
     [0]=> 
     array(3) { 
     ["id"]=> 
     string(2) "13" 
     ["page"]=> 
     string(9) "index.php" 
     ["private"]=> 
     string(1) "0" 
     } 
    } 
    ["_count":"DB":private]=> 
    int(1) 
    ["_lastId":"DB":private]=> 
    string(1) "0" 
    } 
    ["_data":"User":private]=> 
    NULL 
    ["_sessionName":"User":private]=> 
    string(4) "user" 
    ["_isLoggedIn":"User":private]=> 
    NULL 
    ["_cookieName":"User":private]=> 
    string(18) "pmqesoxiw318374csb" 
} 

想,如果我在我得到以下轉儲

object(User)#3 (5) { 
    ["_db":"User":private]=> 
    object(DB)#4 (7) { 
    ["_pdo":"DB":private]=> 
    object(PDO)#5 (0) { 
    } 
    ["_query":"DB":private]=> 
    object(PDOStatement)#8 (1) { 
     ["queryString"]=> 
     string(50) "SELECT id, page, private FROM pages WHERE page = ?" 
    } 
    ["_error":"DB":private]=> 
    bool(false) 
    ["_results":"DB":private]=> 
    array(1) { 
     [0]=> 
     object(stdClass)#6 (3) { 
     ["id"]=> 
     string(2) "13" 
     ["page"]=> 
     string(9) "index.php" 
     ["private"]=> 
     string(1) "0" 
     } 
    } 
    ["_resultsArray":"DB":private]=> 
    array(1) { 
     [0]=> 
     array(3) { 
     ["id"]=> 
     string(2) "13" 
     ["page"]=> 
     string(9) "index.php" 
     ["private"]=> 
     string(1) "0" 
     } 
    } 
    ["_count":"DB":private]=> 
    int(1) 
    ["_lastId":"DB":private]=> 
    string(1) "0" 
    } 
    ["_data":"User":private]=> 
    object(stdClass)#7 (29) { 
    ["id"]=> 
    string(1) "1" 
    ["email"]=> 
    string(25) "[email protected]" 
    ["username"]=> 
    string(5) "admin" 
    ["password"]=> 
    string(60) "$2y$12$1v06jm2KMOXuuo3qP7erTuTIJFOnzhpds1Moa8BadnUUeX0RV3ex." 
    ["fname"]=> 
    string(4) "Raja" 
    ["lname"]=> 
    string(5) "Gopal" 
    ["permissions"]=> 
    string(1) "1" 
    ["logins"]=> 
    string(2) "27" 
    ["account_owner"]=> 
    string(1) "1" 
    ["account_id"]=> 
    string(1) "1" 
    ["company"]=> 
    string(9) "UserSpice" 
    ["stripe_cust_id"]=> 
    string(0) "" 
    ["billing_phone"]=> 
    string(0) "" 
    ["billing_srt1"]=> 
    string(0) "" 
    ["billing_srt2"]=> 
    string(0) "" 
    ["billing_city"]=> 
    string(0) "" 
    ["billing_state"]=> 
    string(0) "" 
    ["billing_zip_code"]=> 
    string(0) "" 
    ["join_date"]=> 
    string(19) "2016-01-01 00:00:00" 
    ["last_login"]=> 
    string(19) "2016-03-17 05:08:20" 
    ["email_verified"]=> 
    string(1) "1" 
    ["vericode"]=> 
    string(6) "322418" 
    ["title"]=> 
    string(0) "" 
    ["active"]=> 
    string(1) "0" 
    ["custom1"]=> 
    string(0) "" 
    ["custom2"]=> 
    string(0) "" 
    ["custom3"]=> 
    string(0) "" 
    ["custom4"]=> 
    string(0) "" 
    ["custom5"]=> 
    string(0) "" 
    } 
    ["_sessionName":"User":private]=> 
    string(4) "user" 
    ["_isLoggedIn":"User":private]=> 
    bool(true) 
    ["_cookieName":"User":private]=> 
    string(18) "pmqesoxiw318374csb" 
} 

然後,我想你以下建議

if (isset($user)) { 
Redirect::to('users/account.php'); 
} 
我記錄

現在發生的事情是,如果我登錄它完全重定向到account.php。但是,假設,如果我退出它說,跟隨誤差

enter image description here

回答

1

我解決它成功的index.php中

<?php 
if ($user->isLoggedIn()) { 
Redirect::to('account.php'); 
} 
?> 

添加以下代碼,我很感謝@DanHoover與他的領導幫助下只有我進行。謝謝你的伴侶。

+0

我很高興它的工作!我完全忘記了isLoggedIn()函數......自從我寫了這個函數以後,這真的很有趣。無論哪種方式,我很高興你啓動並運行。另外,使用Redirect :: to static方法的好處在於它首先使用JavaScript,如果不起作用,它將返回到頭('location'),因此它有助於防止頭已發送錯誤。 –

1

我不是100%肯定你是如何得到的登錄表單,如果你已經登錄,你確定你是登錄?你可以做幾件事...

當你登錄到UserSpice時,你可以訪問一個名爲$ user的變量。如果那不在那裏,你沒有登錄。這給你一些選擇。在PHP頁面上的任何地方測試的目的,你可以做

dump($user); //will give you a preformatted var_dump of the user variable. 

如果返回一個錯誤,那麼你就不能登錄。如果它給出了一個格式化的精美的var_dump,你是。一旦你確定你已經登錄,你可以處理重定向。

如果我正確理解您的問題,您希望該網站的行爲不同,如果用戶登錄。我是否正確說您不希望登錄用戶轉到主頁。

所以,你想要做的是進入index.php在根和頁面的頂部後面的行檢查頁面是否是一個安全頁面(類似),如果isSecurePage或任何它被稱爲),放。

if (isset($user)) { 
Redirect::to('users/account.php'); 
} 

如果不是這樣......那真的很接近。基本上...你正在檢查用戶變量是否存在,如果是,你想使用內置的靜態函數將它們重定向到某個地方。

讓我知道如果解決它。

+1

首先,感謝您的回覆。我非常榮幸能從UserSpice開發者網站得到關於這個問題的答覆。我更新了我的問題,並在執行建議後得到了結果。請澄清我,即使我沒有登錄(但是該轉儲中沒有數據),爲什麼我會得到轉儲輸出。順便說一句,我只是在你的領導的幫助下解決它。我會在下面的隊友回答。感謝一噸 –