【Laravel】 로그인하지 않은 상태에서의 작업을 보존하고 자동 로그인 → 작업을 수행하는 방법

8525 단어 PHPLaravel

개요


Laravel에서 로그인하지 않은 상태의 작업을 중지하고 자동으로 로그인 → 실행 코드를 쓰는 예입니다.참고가 됐으면 좋겠어요.
무슨 말인지 이해하기 어려워서 실례로 소개해 드릴게요.

하고 싶은 일의 구체적인 예


무용 과정 예약 사이트를 예로 들어 규격을 설명하다.
화면 아래쪽의'예약'버튼을 누르면'트위터 공동 로그인(허가 약속)→예약'이 빈틈없이 실행된다.

이미지의'예약'버튼을 누르면 트위터 인증을 통해 로그인하여 예약이 완료됩니다.간편하다🙌
이전에 사용한 예약 서비스는 예약하기 전에 "사용자 로그인 → 로그인"이 필요합니다.이것을 없애고 예약 전의 번거로움을 최대한 없앴다.
특히이번에는트위터를전문으로등록해협업하는사용자들을 통해어느 SNS와협업할지선택하는시간도크게 줄었습니다.😁

실현 방법


여기에도 무용 수업 예약 사이트를 예로 들어 설명한다.
예를 들면 트위터 제휴지만 다른 SNS 제휴 로그인도 가능하니 필요에 따라 활용하세요.
[전제]
laravel v5.8.19
php v7.3.8

대략적인 처리 절차

  • 사용자 예약 작업
  • (로그인하지 않은 경우) 쿠키에 예약 작업 정보 저장
  • 트위터 인증 목적지로 재지정, OAuth 인증
  • (첫 로그인 시) 사용자의 로그인 처리
  • 로그인, 쿠키 정보에 따라 예약 처리
  • 구현 지침


    예약 작업~OAuth 인증 목표로 리디렉션


    우선 이 부근에서 처리한 코드를 소개합니다
  • 사용자 예약 작업
  • (로그인하지 않은 경우) 쿠키에 예약 작업 정보 저장
  • ReserveController.php
        public function create(Request $request)
        {
    
            // 未ログインの場合は、予約操作をCookieに保存してTwitter認証へリダイレクト
            if (Auth::check() === false) {
                Cookie::queue(Cookie::make('noAuthReserveRequest', $request->lesson_id, 30));
                return redirect('/login/twitter');                     
            }
            // 以下はログイン済みの場合の処理。省略
    

    Twitter 인증 목적지로 다시 지정, OAuth 인증

    return redirect('/login/twitter') 이후 처리는 라벨에서 트위터 인증을 하는 것이다.참조세계에서 가장 상세하게 Socialite의 사용 방법을 설명했다.
    세상에서 가장 예의 바르니 안심하세요😊
    이 보도는 붐비는 맏이 이 쓴 것이다.모른 채TwitterDB 신고하면 기뻐요.본인이 말한 것 같아서요.제가 다른 일로 다섯 번 정도 고소를 했어요.
    말을 잘못 했어요.

    사용자 등록 처리~예약 처리


    남은 처리를 설명해 드리겠습니다!
    6. (첫 로그인 시) 사용자의 로그인 처리
    7. 로그인, 쿠키 정보에 따라 예약 처리
    LoginController.php
        /**
         ** OAuth認証の結果受け取り
         **
         ** @param str $provider
         ** @return \Illuminate\Http\Response
         **/
        public function handleProviderCallback($provider)
        {
            // 直接関係ないエラー処理等は説明のために省いています
            $providerUser = \Socialite::with($provider)->user();
            Auth::login(SocialService::findOrCreate($providerUser, $provider));
    
            if (Auth::check()) {
    
                //ログイン前にしてた予約操作を実行する
                $noAuthReserveRequest = Cookie::get('noAuthReserveRequest');
                \Cookie::queue(\Cookie::forget('noAuthReserveRequest'));
    
                //予約IDがCookieに入力されている場合は予約する
                if (!empty($noAuthReserveRequest)) {
    
                    //予約の重複を防ぐ
                    if (0 === Reserve::where('user_id', Auth::user()->id)->where('lesson_id', $noAuthReserveRequest)->count()) {
                        //ログイン前にした予約操作を実行
                        $reserve = new Reserve();
                        $reserve->fill(['user_id' => Auth::user()->id]);
                        $reserve->fill(['lesson_id' => $noAuthReserveRequest]);
                        $reserve->save();
    
                        return view('course.reserve')->with(['course' => $reserve->lesson->course, 'lesson' => $reserve->lesson]);
                    }
                }
    

    총결산


    Fat 컨트롤러의 메스꺼운 전선입니다.
    며칠 후에 재구성하고 싶어요.
    겸사겸사 말씀드리지만, 실제로는 여기서 제 무용 수업을 예약할 수 있습니다.
    춤 경험이 없는 사람들은 환영합니다!춤으로 운동 부족을 없애자!
    매월 마지막 토요일, 시부야역 도보 5분, 15~16시, ¥1000.
    https://eedance.funspot.tokyo/
    여기서 마치겠습니다.

    좋은 웹페이지 즐겨찾기