触发Laravel 5.4事件导致localhost出现问题

时间:2018-02-20 13:09:29

标签: php laravel events pusher broadcasting

首先你好, 我有一个我无法管理的问题。 我发布了一个像下面这样的ajax请求

  <script>



    $(document).ready(function(){


        $(document).on('keydown' , '.message_input', function(e){



            var token = $('input[name=_token]').val(); 
            var msg  = $(this).val(); 
            var element = $(this) ; 
            var ul = element.parent().parent().find('ul'); 
            var authenticated_user_id = $(this).attr('data-auth-id'); 
            var user_id = $(this).attr('data-to-user-id'); 
            var conversation_id = $(this).attr('data-conversation-id'); 

            if(!msg == '' && e.keyCode == 13  && !e.shiftKey){


                                 $.ajaxSetup({
                                      headers: {
                                          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                      }
                                  });


                                $.ajax({



                                    url : "{{ url("$lang/post_message_test")}}" ,
                                    method : 'POST',
                                    cache: false, 
                                    dataType:'JSON', 
                                    data: {   msg:msg  , authenticated_user_id:authenticated_user_id  , user_id:user_id , conversation_id: conversation_id , _token:token   },

                                    success:function(data){

                                       // my logic  
                                    }
                                });


                                return false ;    


            } 

        });

    });

</script>

这将使用聊天控制器和名为postMessage的特定功能

它具有如下结构

public function postMessage(Request $request ){


    if($request->ajax()){




        /** data coming from our post request with an elegant way */
        $authenticated_user_id = $request->get('authenticated_user_id'); 
        $user_id = $request->get('user_id'); 
        $conversation_id = $request->get('conversation_id');

        $msg = $request->get('msg');




        // find user image  
        $user = User::find($authenticated_user_id) ; 
        $image = asset('uploads/users/').'/'.$user->profileImage ; 




        $name = '' ; 

        if($user->userType == 'doctor'){

            $name = $user->doctorName ;
        }else{
            $name = $user->headPersonName  ; 
        }





        $message  = new Message ; 

        $message->sender_id = $authenticated_user_id ; 
        $message->receiver_id = $user_id ; 
        $message->conversation_id = $conversation_id ; 
        $message->message = $msg ; 
        $message->is_read = 'not_read'  ; 

        if($message->save()){

            $msg=Message::where('id',$message->id)
            ->select('id','message','sender_id','receiver_id','created_at')
            ->with('sender')
            ->with('receiver')
            ->first();






         $sender_name =  $msg->sender->name ; 
         $sender_image =  $msg->sender->profileImage ; 

          $dt = Carbon::now(); 

                $message_date  = $dt->diffForHumans() ; 






           event(new MessageWasRecieved( $user_id , $message->message , $image  , $authenticated_user_id , $name ));

           return Response::json([
                                    'status'=>'success'   , 
                                    'message'=>$msg->message , 
                                    'user_id'=>$user_id , 
                                    'auth_id'=>Auth::user()->id , 
                                    'image'=>$sender_image , 
                                    'name'=>$sender_name 


                                ]);



        }else{

             return Response::json([
                                    'status'=>'error'   , 



                                ]);
        }






    }


}

在简单的逻辑中,当它到达事件函数时,它应该触发该事件并在javascript中等待收听此事件。

真正发生的是在发布到此url post_message_test之后 在网络选项卡中发生的事情,而不是返回状态代码200,它给我一个302状态(检查图像下方)

enter image description here

并调用另一个名为campaign的网址(这是我的项目中也找到的网址)。我已经尝试了所有可能的警告,我检查了我的代码,并且确信每件事情都很完美

是什么导致了这一点,我希望我能描述我的问题是正确的 谢谢

1 个答案:

答案 0 :(得分:0)

  

状态码302表示重定向!不止一个   对此的解释,但通常是由于受到保护的路线   用户未连接时使用auth中间件!

要通过XHR请求与laravel通信最好的方法,这样做是使用Laravel Passport(link here)!我已经遇到过这种问题!这个问题是Laravel在收到请求ajax时检查它是否在标题中有“授权”标题,否则重定向用户,因为对他来说他没有访问令牌

如何安装Laravel Passport?

  • 与作曲家一起运行: composer require laravel/passport
  • 然后运行:php artisan migrate以迁移护照表

<强>配置

  • 转到Config / auth.php并将api驱动程序更改为passpor

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
    
    • 最后在AuthServicePovider类中的User Model和Passport :: routes()中添加HasApiTokens特征:方法boot()