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

$response = $api->get('user/login');

api를 통해 사용자 값을 $response에 담았습니다.


이걸 auth로 인증처리가 가능한가요??

현재 사용자로 설정 및 쿠키나 세션을 통해 유지하고 싶습니다.


    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      원하시는 내용이 맞는지는 모르겠습니다만....

      Auth::attempt($credential) 을 이용하면 될것 같습니다.

      만약 원하시는 인증방법이 Auth::attempt() 와 다르다면

      Auth::loginUsingId($userPrimaryKey) 를 이용하여 직접 attempt를 구현하셔도 될것 같습니다.

      1. 이시헌

        api(데이터베이스)를 통해 인증은 다 끝났고, 이제 프론트 쪽에서 사용자라고 인지를 시키는 구현만 하면 되는데, 여기서 어떻게 해야할까요?

      2. 갸르릉

        도움은 드리고 싶은데;;; 제가 이해력이 안좋아서 하고자 하시는 내용을 제가 파악하기가 힘드네요;; ㅠㅡㅠ ㄷㄷ

      3. 이시헌

        인증은 로그인 컨트롤러에서 api를 통해서 $response 변수에 id, name, picture 등의 정보가 배열로 담아있습니다.

        제가 궁금한건 이렇게 로그인 컨트롤러를 통해서 받은 현재 사용자 데이터를 유지하고 싶은겁니다. 

        그래서 콘트롤러나 뷰 블레이드에서도 현재 사용자 정보를 호출하고 싶습니다. 

      4. 갸르릉

        api 를 통해 받은 response 객체의 데이터로 로그인처리까지 끝나셨다면, 해당 정보를 Session 에 할당해서 블레이드 등 전역에서 사용하시면 될것 같습니다. Session 관련을 찾아보시면 할당하는 부분과 호출 부분을 보시면 될것 같습니다. https://laravel.kr/docs/5.4/session

        컨트롤러에서 

         할당시: $request->session()→put('key', 'value');

         호출시: $request->session()→get('key');

        블레이드에서

         호출시: Session::get('key') 

        만약에, 아직 로그인 처리를 하시지 않았다면...

        현재 로그인정보를 api를 통해서 받아오시는것 같은데...

        api를 통해서 받아오는 회원정보가 현재의 라라벨의 DB와 연동이 되어 있지 않으시다면

        auth 드라이버를 별도로 만드셔야 할것 같습니다. 아래 링크를 참고하시면 될것 같습니다.

        https://laracasts.com/discuss/channels/laravel/laravel-authentication-without-database

      5. 갸르릉

        드라이버를 만드시는게 번거로우시다면 받아오시는 회원정보를 담아두는 테이블을 만드셔서 그 테이블에 회원정보를 넣어두고 라라벨 자체 auth를 이용하면 될것 같습니다.

        그러니까.... 소셜 로그인과 기본 로그인을 병합하여 처리하는 방법처럼 그런 형태로 하시면 auth 간단하게 처리할 수 있지 않을까요?

        별 도움이 되지 못해 죄송합니다...ㅜ

      6. 이시헌

        감사드립니다. 제가 질문이 모호했습니다.


        웹 서버(laravel)

        데이터 서버 (php기반 restful)

        웹 서버에서 로그인 요청을 보내서 사용자 값을 가져온 후,

        웹 서버에서 사용자 정보를 계속 유지하고 싶은겁니다. 모든 처리는 데이터 서버에서 처리가 됩니다.


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

      라라벨 기본 auth는 DB와 연계되어 있기 때문에... 기본 auth를 이용해서는 안될것 같습니다.

      guard 구현체를 이용하여 별도로 guard를 만들어서 처리하면 될것 같습니다.

      guard를 구현하는 방법은 https://laravel.kr/docs/5.4/authentication 이 링크를 참고하시면 됩니다.

      guard에서 DB를 통한 검사를 수행하지 않고 api를 통해서 받은 정보를 별도로 세션에 저장하여 

      guard 구현체의 메소드를 재 정의 하시면 될 것 같습니다. 

      아래 코드는 완전한 상태가 아니며, 위 문서 링크를 참조해 가시면서 테스트해보시면 진행방향을 잡으실 수 있을 것 같습니다.

      config/auth.php
      <?php
      # config/auth.php
      
      
      'guards' => [
          'web' => [
              'driver' => 'sess',
              'provider' => 'users',
          ],
      
          'api' => [
              'driver' => 'token',
              'provider' => 'users',
          ],
      ],
      app/Guards/SessGuard.php
      <?php
      # app/Guards/SessGuard.php
      # 이 클래스는 완전하지 않으면 해당 메서드를 테스트 하시면서 원하는 방향으로 작성하시면 됩니다.
      
      
      namespace App\Guards;
      
      use Illuminate\Contracts\Auth\Authenticatable;
      use Illuminate\Contracts\Auth\Guard;
      use Illuminate\Support\Facades\Session;
      
      
      class SessGuard implements Guard
      {
      
          /**
           * Determine if the current user is authenticated.
           *
           * @return bool
           */
          public function check()
          {
              // TODO: Implement check() method.
      
              if (Session::get('user_id') > 0) {
                  return true;
              } else {
                  return false;
              }
          }
      
          /**
           * Determine if the current user is a guest.
           *
           * @return bool
           */
          public function guest()
          {
              // TODO: Implement guest() method.
              if (Session::get('user_id') > 0) {
                  return false;
              } else {
                  return true;
              }
          }
      
          /**
           * Get the currently authenticated user.
           *
           * @return \Illuminate\Contracts\Auth\Authenticatable|null
           */
          public function user()
          {
              // TODO: Implement user() method.
              return Session::get('user_id');
          }
      
          /**
           * Get the ID for the currently authenticated user.
           *
           * @return int|null
           */
          public function id()
          {
              // TODO: Implement id() method.
              return 123;
          }
      
          /**
           * Validate a user's credentials.
           *
           * @param  array $credentials
           * @return bool
           */
          public function validate(array $credentials = [])
          {
              // TODO: Implement validate() method.
              return true;
          }
      
          /**
           * Set the current user.
           *
           * @param  \Illuminate\Contracts\Auth\Authenticatable $user
           * @return void
           */
          public function setUser(Authenticatable $user)
          {
              // TODO: Implement setUser() method.
          }
      }
      Providers/AuthServiceProvider.php
      <?php
      # Providers/AuthServiceProvider.php
      
      
      public function boot()
      {
          $this->registerPolicies();
      
          Auth::extend('sess', function ($app, $name, array $config) {
          	return new SessGuard();
      	});
      }
      Test code
      <?php
      public function index()
      {
      	// 세션을 이용하거나 Guard 구현체를 좀더 다듬어서 Auth 파사드 메서드를 이용해도 될것 같습니다.
          Session::put('user_id', 1234);
          
      	// Guard 구현체 check() 메서드 테스트
          if (Auth::check()) {
              echo 'yes';
      		// guard 구현체 user() 메서드 테스트
              echo Auth::user();
          } else {
              echo 'no';
          }
      
          return '';
      }
      1. 갸르릉
        Illuminate/Auth/SessionGuard 를 참고하여 Custom Guard를 작성하시면 도움이 될 듯 싶습니다.
      2. 이시헌

        감사드립니다. 그런데 저는 SESSION put 하고 새로 고침하면 session get에 null 만 나오네요.

      3. 갸르릉

        세션에서 문제가 생기면 안되는데....;;; 

        use Illuminate\Support\Facades\Session;

        당연히 사용하시는 곳에 세션이 불러와졌을테구....;;

        혹시 put 다음에 바로 get 하고 페이지를 실행 시켜도 null 인가요??

      4. 이시헌

        put 하고 get 하면 바로 나옵니다. 허나 새로고침하면 없어집니다.


      CommentAdd your comment...