Как проверить, вошел ли пользователь в реагирующий компонент при использовании аутентификации laravel?

Я настроил аутентификацию laravel на своем веб-сайте. Это работает очень хорошо, но я хочу знать, как я могу проверить, вошел ли пользователь в систему, когда находится внутри компонента реакции, и отобразить его/ее конкретный контент.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
5
0
1 698
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из подходов, который я использовал для решения проблемы с проверкой того, вошел ли пользователь в систему, заключается в том, чтобы прикрепить его к вашему основному блейд-файлу как «глобальные данные». Сначала настройте контроллер.

public function index()
{        
    return view('welcome')->with(["globalData" => collect([
        'user' => Auth::user()
    ]);
}

Затем в вашем корневом файле блейда

<script>
    let globalData = "{!! $globalData->toJson() !!}";
</script>

Затем вы можете получить доступ к пользовательскому свойству в любом месте ваших компонентов, обратившись к globalData.user и, таким образом, проверить, является ли user объектом или нулевым/пустым.


Пример из проекта React с версией 15.4.2

Контроллер

class GuiController extends Controller
{
    public function __construct() {
        $this->data = [
            'projects' => $this->projects(), 
            'packs' => Pack::all(),
            'stimpack_io_token' => env('STIMPACK_IO_TOKEN'),
            'stimpack_data_url' => env('STIMPACK_DATA_URL'),
            'manipulatorData' => ManipulatorController::attachStartupData()
        ];
    }

    public function index()
    {        
        return view('welcome')->with(["data" => collect($this->data)]);
    }

Вид

<body>            
    <div id = "main"></div>
    <script>
        let data = {!! $data->toJson() !!};
    </script>
    <script src = "{{asset('js/app.js')}}" ></script>                
</body>

Использование внутри компонента

upload() {
    var compiler = new Compiler(this.props.engine);
    var compiled = compiler.compile();
    $.ajax({
        type: "POST",
        beforeSend: function(request) {
            request.setRequestHeader("stimpack-io-token", data.stimpack_io_token);
        },

Эй, я попробовал этот метод, но он говорит о неопределенной переменной globalData.

Shehban Patel 09.04.2019 04:00

Я отформатировал код следующим образом: <script> let globalData = "{!! $globalData->toJson() !!}"; </script> и public function index() { return view('welcome')->with([$globalData => collect([ 'user' => Auth::user() ]) ]); } Если я закомментирую тег скрипта в корневом файле блейда, ошибки не будет.

Shehban Patel 09.04.2019 04:11

Хорошее форматирование, плохое редактирование. И вам должно быть хорошо, просто замените $globalData на «globalData» в вашем контроллере. Видите разницу с моим приведенным примером, где это строка, а не переменная?

ajthinking 09.04.2019 04:53

Потрясающий! Я предпочитаю фронтальный независимый код реакции, используя LocalStorage для хранения кода авторизации, но я не знал блейд-решения. Спасибо

Joao Polo 09.04.2019 05:24

@Андерс Спасибо. Это сработало, как только я разобрался со своими маршрутами. Я могу получить globalData на странице просмотра, напечатав {{ $globalData }}, но когда я набираю globalData в любом из своих компонентов, он говорит, что не определено. Мне нужно передать его в конструктор и загрузить данные из этой переменной?

Shehban Patel 09.04.2019 06:35

Нет, вы не должны этого делать. Можете ли вы опубликовать код? Я добавил пример из реальной жизни в ответ, возможно, это может вам помочь

ajthinking 09.04.2019 06:55

@ Андерс Не знаю, что с ним не так, но теперь оно работает отлично. Я получаю все данные пользователя. Найти материал для реакции laravel немного сложно, поэтому мне пришлось прибегнуть к stackoverflow для ответов. Спасибо за помощь.

Shehban Patel 09.04.2019 07:34

Несмотря на то, что кажется, что это информация только для чтения, существуют ли какие-либо риски безопасности, связанные с передачей этой информации на сторону клиента?

Jonathan Ma 27.01.2020 03:43

Другие вопросы по теме