질문을 삭제하지 말아주세요.!
 
1
0
-1


현재 별도로 구성된 테이블로 라라벨 기본 기능인 auth로 아이디숫자로 판별해서 로그인까지 되어 있는 상태입니다.

테이블 같은 경우, remember_token은 존재하지 않습니다. (구조상 추가할 수 없는 상태입니다)


로그아웃 하려면 아래와 같이 에러메시지가 나옵니다.

SQLSTATE[HY000]: General error: 20018 Invalid column name 'remember_token'. [20018] (severity 16) [(null)] (SQL: update [member_user] set [remember_token] = Hc......


remember_token이 존재 하지 않기 때문인데 테이블에 컬럼 하나 추가하면 해결될 문제로 보입니다만

여건이 그렇지 못하기 때문에 아예 비활성화를 시켜버리고 싶습니다. 애시당초 기억시킬 필요가 없는 사이트입니다!


어디가서 저걸 해지시킬 수가 있을까요?

    CommentAdd your comment...

    3 answers

    1.  
      1
      0
      -1

      기본 User모델 대신 다른모델을 쓰시려면

      app/config/auth.php 설정파일에 존재하는 model 값을 해당 모델로 변경하셔야 합니다

          'providers' => [
              'users' => [
                  'driver' => 'eloquent',
                  'model' => App\User::class,
              ],
      
              // 'users' => [
              //     'driver' => 'database',
              //     'table' => 'users',
              // ],
          ],


      https://github.com/laravel/laravel/blob/0869d963aa96e2a9d4ab58cb451e35e9a31b07d9/config/auth.php#L70



        CommentAdd your comment...
      1.  
        1
        0
        -1

        제가 아는대로 답변드립니다. 

        라라벨의 기본 Auth 를 활용하여 logout 을 시도하면 remember_token 관련 아래의 순서로 실행됩니다. 

        1. App\Http\Controllers\Auth\LoginController@logout 메소드 호출
        2. Illuminate\Foundation\Auth\AuthenticatesUsers 의 logout 메소드 호출
        3.  이 메소드의 $this->guard()->logout() 호출
        4.  여기서 guard()는  Illuminate\Contracts\Auth\StatefulGuard 인터페이스를 상속한 Illuminate\Auth\SessionGuard 클래스의 logout() 호출 

        5. 이 logout 메소드는 아래와 같은 remember_token 처리

          if (! is_null($this->user)) {
             $this->cycleRememberToken($user);
          }

        6. cycleRememberToken 메소드는 아래와 같습니다.

          protected function cycleRememberToken(AuthenticatableContract $user)
          {
          $user->setRememberToken($token = Str::random(60));

          $this->provider->updateRememberToken($user, $token);
          }
        7. 위에서 $user->setRememberToken  메소드가 user 의 정보 갱신처리
        8. setRememberToken 은 App\User 클래스의  setRememberToken 메소드임
        9. App\Users 의 setRememberToken 메소드는 실제로는 
          Illuminate\Foundation\Auth\User 클래스의 setRememberToken 메소드를 실행함 (상속)
        10. 여기의 setRememberToken 메소드는 Illuminate\Auth\Authenticatable trait 으로 처리
        11. 이 trait 의 setRememberToken 메소드를 오버라이드 처리하면 됨


        12. 결론적으로 App\User 클래스에서 rememberToken 관련 메소드 2개를 오버라이드하면 됩니다. 

          public function getRememberToken()
          {
          return null;
          }

          public function setRememberToken($value)
          {
          // noting to do
          }

        1. Jongwon Kim

          안녕하세요.

          로그아웃의 흐름에 대해서 이해할 수 있는 기회를 주셔서 감사합니다.

          저같은 경우 모델을 App\User을 지우고 새로 모델을 만들었는데

          단순하게 그곳에다가 위의 오버라이드 소스를 넣기만 하면 동작하게 되는것인가요?

          현재 사용하고 있는 모델의 장소는

          App\models\members.php 입니다.

          App\User 는 검색해도 나오지 않네요.

        2. 안정수

          현재 사용하고 있는 모델이 있다면 해당 모델에 메소드를 오버라이드 (없다면 추가) 하시면 됩니다. 

          물론 현재 모델이 "Illuminate\Foundation\Auth\User" 를 상속하고 있으면 됩니다.

        3. Jongwon Kim

          답변 감사합니다. 어느정도 해결된 것 같습니다.

          나머지 자잘한 에러들이 있습니다만 그건 스스로 해결해보겠습니다!

          신세 지게 되었습니다. (_ _)

        CommentAdd your comment...
      2.  
        1
        0
        -1

        User모델에 아래 함수를 추가하라고 하네요 (오버라이딩)

        https://stackoverflow.com/a/43467377

          /**
           * Overrides the method to ignore the remember token.
           */
          public function setAttribute($key, $value)
          {
            $isRememberTokenAttribute = $key == $this->getRememberTokenName();
            if (!$isRememberTokenAttribute)
            {
              parent::setAttribute($key, $value);
            }
          }
        1. Jongwon Kim

          답변 감사합니다.

          다만 아직 해결이 안됐어요.. 라라벨 5.5 사용중에 있구요.

          경로는 아마도

          vendor/laravel/framework/src/llluminate/Auth/Authenticatable.php

          이곳인것 같아서 함수를 추가해보았는데 로그아웃 버튼 눌러도 에러는 사라졌는데 아무런 반응이 없이 로그아웃 되지가 않네요.

          넣은 곳이 잘못되었는가 잘 모르겠네요.

        2. Darron

          User모델은 app폴더 바로 아래 존재할듯 싶습니다


          기본 네임스페이스가 App\User 입니다

        3. Jongwon Kim

          데론님 답변 감사합니다.

          어느정도 해결이 된 것 같습니다.

          아직 조그마한 에러들이 남아 있는데 그건 스스로 해결해볼게요!

          라라벨 다음 버전에는 이런 부분도 커스터마이징 될 수 있게 변했으면 좋겠네요~ㅎㅎ

        CommentAdd your comment...