Прежде всего Привет,
У меня есть своего рода проблема, с которой я не могу справиться.
я отправляю запрос 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 (см. изображение ниже)
и назовите другой URL-адрес с именем кампании (этот URL-адрес также найден в моем проекте). я перепробовал все возможные предостережения, я ужасно проверил свой код и уверен, что все работает отлично
так, что вызывает это, и я надеюсь, что я мог описать мою проблему правильно
Спасибо
Код состояния 302 означает перенаправление! Существует более одного
объяснение этому, но часто это связано с маршрутом, защищенным
авторизация промежуточного программного обеспечения, пока пользователь не подключен!
Для связи с Laravel по запросу XHR лучший способ Для этого нужно использовать Laravel Passport ( ссылка здесь )! Я уже встречал такую проблему! Эта проблема заключается в том, что Laravel, когда он получает запрос ajax, проверяет, есть ли в заголовках заголовок «Авторизация», иначе он перенаправляет пользователя, потому что для него у него нет токена доступа.
Как установить паспорт Laravel?
composer require laravel/passport
php artisan migrate
перенести паспортные таблицыконфигурация
Перейдите в Config / auth.php и измените драйвер api на passpor
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
Других решений пока нет …