iT邦幫忙

0

laravel 註冊登入的問題

各位大神好 小弟又來問問題了
小弟自己建立了一個 Middleware

MemberMiddleware.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class MemberMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {   
        if (!Auth::guard('member')->check()) {
            return redirect(Route('index'));
        }
        return $next($request);
    }
}

然後自己建立了登入跟註冊的方法

登入

public function login(Request $request){
     
        $member = Accounts::where("login",$request->account)->first();
        if($member ==null)
            return view('login',['error'=>1]);

        if($member->password != $request->password)
            return view('login',['error'=>1]);
        
        $auth = $member->auth;
        
        if($auth==null){
           $auth = new AccountAuth;
           $auth->account =$member->login;
           $auth->save();
        }
      
        if($auth->isactive ==0)
            return view('login',['error'=>2]);

        Auth::guard('member')->login($member);
        
        return redirect(Route('memberIndex'));
    }

註冊後登入

public function signup(Request $request){

        $request->validate([
            'account' => 'required|min:4|max:16',
            'password' => 'required|min:4|max:16' ,
        ]);
        
        $member = new Accounts();
        $member->login = $request->account;
        $member->password = $request->password;
        $member->save();

        $auth = new AccountAuth();
        $auth->account =$member->login;
        $auth->save();

        Auth::guard('member')->login($member);

        //dd(Auth::guard('member')->check());
        
        return view('member.signupSuccess');
    }

route 用上面建立的middleware來檢查是否登入

Route::prefix("member")->middleware("member")->group(function(){

    Route::get('/',"MemberLoginController@home")->name("memberIndex"); 
});

用登入的方法登入之後 進到member group 底下的頁面沒有問題
但是用註冊完成的登入 進到member group 底下的頁面就會被middleware踢回首頁
註冊完成之後檢查登入的狀態是得到true 但是換頁之後就會變成false
不知道有沒有大大遇到過這個問題?該怎麼解決呢?

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-08-27 10:41:57
最佳解答

我不知道你登入做了甚麼動作,
一般來說登入的方式是透過Cookie或Session,
有人說Session是比較安全.

看更多先前的回應...收起先前的回應...

小魚大大 登入是用laravel的原生方法登入

Auth::guard('member')->login($member);

有試著去看她原本的code 是用Session沒錯 我的問題是 再註冊跟登入都是用上面那一行code做登入 怎會有不一樣的結果QQ

小魚 iT邦大師 1 級 ‧ 2019-08-27 11:01:03 檢舉

我猜,
你的 $member 可能少了什麼?
可以考慮重新從資料庫抓資料,
像登入時那樣?
其實如果重複的動作有時候可以寫個function,
不過看起來Code不多也可以先不用.

小魚大大 真的耶 註冊的時候多一個步驟把剛剛寫入的model從資料庫撈出來登入就可以了.... 不過這是什麼原理壓 求大大解釋QQ

 $member = Accounts::where("login",$request->account)->first();
 Auth::guard('member')->login($member);
小魚 iT邦大師 1 級 ‧ 2019-08-27 11:22:49 檢舉

我不知道,
因為你那應該是用套件的,
要看套件做了甚麼動作,
我是都習慣自己寫判斷...

好的 還是非常感謝小魚大大的幫忙
我再自己研究一下 感恩 :)

我要發表回答

立即登入回答