2016-11-21 57 views
3

我遇到了Laravel會話創建和讀取的問題。 我可以創建會話值,但問題是訪問數據。 如果我在POST請求中創建會話值,那麼我無法通過GET請求訪問它。Laravel無法檢索保存在POST請求中的會話數據

這裏是我的路線

Route::get('/', '[email protected]'); 
Route::get('/admin/dashboard', '[email protected]'); 
Route::post('/admin/login_admin', '[email protected]'); 
Route::post('/admin/login_test', '[email protected]'); 
Route::get('/admin/login', '[email protected]'); 

這裏doLogin使用POST方法:

public function doLogin(Request $request){ 

    $email = $request->input("email"); 
    $password = $request->input("password"); 

    $checkerInfo = AdminGetLoginChecker($email, $password); 
    //if logged in 
    if($checkerInfo){ 
     $request->session()->put('loggedIn', '1'); 
     $request->session()->put('userId', $checkerInfo); 
     $request->session()->save(); 
     return response()->json([ 
      'success' => true, 
      'message' => 'logged In' 
     ]); 
    } 

    return response()->json([ 
     'success' => false, 
     'message' => 'Incorrect User Email, Password' 
    ]); 

} 

現在的問題是,如果要求在其他GET請求部分訪問會話值,那麼就沒有允許訪問。

public function dashboard(Request $request) 
{ 

    $data = $request->session()->all(); 

    print_r($data); 

    return view('welcome', ['name' => 'James']); 
} 

這裏它沒有顯示保存的會話數據,因爲它是一個GET請求。

現在,如果嘗試使用POST請求,它會更早顯示doLogin方法保存的數據,以獲得任何其它方法請求

//it's a POST requset 
public function test(Request $request) 
{ 
    $data = $request->session()->all(); 
    print_r($data); 
} 

我怎麼能訪問GET請求方法的會話數據?

由於事先

更新:

請注意,在verifyCsrfToken middelwere的節選區域,以避免CSRF令牌問題添加URL 「 '/管理/ login_admin'」,同時發佈的數據

namespace App\Http\Middleware; 
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; 

class VerifyCsrfToken extends BaseVerifier 
{ 
    /** 
    * The URIs that should be excluded from CSRF verification. 
    * 
    * @var array 
    */ 
    protected $except = [ 
     // 
     'url' => '/admin/login_admin' 
    ]; 
} 

回答

0

讓我們試試這樣

$input = $request->all(); 
// imagine you have Admin.php model 
$query = Admin::login($input['email'], $input['password'])->first(); 
if ($query) 
{ 
    Session::put('userId', $query->id); 
    Session::save(); 
    return "u're in"; 
} 
    else{ 
     return "User name or password is wrong"; 
    } 

,並在您test功能

return $request->session()->get('userId'); 
+0

號我唯一的工作用於通過POST請求訪問的方法。使用GET請求的方法不顯示會話值。 – FRabbi

0

爲什麼你想手動驗證用戶?

對於會話操作使用「會話」外觀。

例如:

Session::set('your_session_key', 'Session Value'); 
Session::save(); 
$yourSessionKey = Session::get('your_session_key'); 
+0

不,我只爲通過POST請求訪問的方法工作。使用GET請求的方法不顯示會話值。也請檢查問題。我已經更新了這個問題 – FRabbi