第一個問題
Route::get('test', function () { session(['wechat.oauth_user'=>1]); dd(session('wechat.oauth_user')); });
輸出1,然後我把session(['wechat.oauth_user'=>1]);
注釋了
Route::get('test', function () { //session(['wechat.oauth_user'=>1]); dd(session('wechat.oauth_user')); });
重新整理頁面,輸出null,這是為什嗎?
第二個問題
我使用了overtrue/wechat的外掛程式,用外掛程式內建的中介軟體成功擷取了使用者資訊,然後user路由裡也輸出了session
public function handle($request, Closure $next, $guard = null) { $wechat = app('EasyWeChat\\Foundation\\Application'); if (!session('wechat.oauth_user')) { if ($request->has('state') && $request->has('code')) { session(['wechat.oauth_user' => $wechat->oauth->user()]); return redirect()->to(url($request->url(), array_except($request->query(), ['code', 'state']))); } return $wechat->oauth->redirect($request->fullUrl()); } return $next($request); }
Route::get('user', function () { dd(session('wechat.oauth_user')); });
在這個基礎上,我建立了自己的中介軟體UserMiddleware
public function handle($request, Closure $next) { if(Auth::guard('web')->guest()){ if (!session('wechat.oauth_user')) { return redirect('user'); } else{ User::CreateOrLogin(session('wechat.oauth_user')); } } return $next($request); }
User.php
方法 CreateOrLogin
是
public static function CreateOrLogin($data){ $user=self::getByOpenid($data['id']); if(!$user){ $create=['openid'=>$data['id']]; $user=self::create($create); } Auth::guard('web')->login($user); } public static function getByOpenid($openid){ return self::where('openid','=',$openid)->first(); }
一切都是ok的,但是每次重新整理頁面都會執行擷取使用者資訊的介面,然後一個個注釋掉,發現Auth::guard('web')->login($user);
這句注釋掉後,重新整理頁面就不會再跳轉到,加上去就要跳轉到擷取使用者資訊介面,感覺像是login會清除掉session一樣
問題三
Route::group(['middleware' => ['web']], function () { Route::get('test', function () { dd(auth()->user()); }); Route::get('test2', function () { dd(auth()->loginUsingId(1)); });});
先訪問test2,成功登陸,再訪問test,輸出null,為什麼。。。
問題一和問題二和問題三沒有關聯,求大神解答
回複內容:
第一個問題
Route::get('test', function () { session(['wechat.oauth_user'=>1]); dd(session('wechat.oauth_user')); });
輸出1,然後我把session(['wechat.oauth_user'=>1]);
注釋了
Route::get('test', function () { //session(['wechat.oauth_user'=>1]); dd(session('wechat.oauth_user')); });
重新整理頁面,輸出null,這是為什嗎?
第二個問題
我使用了overtrue/wechat的外掛程式,用外掛程式內建的中介軟體成功擷取了使用者資訊,然後user路由裡也輸出了session
public function handle($request, Closure $next, $guard = null) { $wechat = app('EasyWeChat\\Foundation\\Application'); if (!session('wechat.oauth_user')) { if ($request->has('state') && $request->has('code')) { session(['wechat.oauth_user' => $wechat->oauth->user()]); return redirect()->to(url($request->url(), array_except($request->query(), ['code', 'state']))); } return $wechat->oauth->redirect($request->fullUrl()); } return $next($request); }
Route::get('user', function () { dd(session('wechat.oauth_user')); });
在這個基礎上,我建立了自己的中介軟體UserMiddleware
public function handle($request, Closure $next) { if(Auth::guard('web')->guest()){ if (!session('wechat.oauth_user')) { return redirect('user'); } else{ User::CreateOrLogin(session('wechat.oauth_user')); } } return $next($request); }
User.php
方法 CreateOrLogin
是
public static function CreateOrLogin($data){ $user=self::getByOpenid($data['id']); if(!$user){ $create=['openid'=>$data['id']]; $user=self::create($create); } Auth::guard('web')->login($user); } public static function getByOpenid($openid){ return self::where('openid','=',$openid)->first(); }
一切都是ok的,但是每次重新整理頁面都會執行擷取使用者資訊的介面,然後一個個注釋掉,發現Auth::guard('web')->login($user);
這句注釋掉後,重新整理頁面就不會再跳轉到,加上去就要跳轉到擷取使用者資訊介面,感覺像是login會清除掉session一樣
問題三
Route::group(['middleware' => ['web']], function () { Route::get('test', function () { dd(auth()->user()); }); Route::get('test2', function () { dd(auth()->loginUsingId(1)); });});
先訪問test2,成功登陸,再訪問test,輸出null,為什麼。。。
問題一和問題二和問題三沒有關聯,求大神解答
檢查是否載入了 web
中介軟體