| Шифрование Laravel |Ошибка «Payload is Invalid» при получении нескольких записей в базе данных, но не при получении одной записи - PullRequest
0 голосов
/ 24 мая 2018

Решение: Эта проблема возникла из-за того, что я пытался расшифровать что-то, что было сохранено в моей базе данных в виде простого текста.Вы, очевидно, не можете расшифровать то, что не зашифровано.Duh!Я чувствую себя идиотом.Но я собираюсь оставить этот пост как напоминание всем тем, кто сталкивался с той же проблемой.Не забудьте проверить свою базу данных, чтобы убедиться, что вы расшифровываете что-то зашифрованное!: P

Исходное сообщение

Итак, я новичок в области шифрования и дешифрования, поэтому я постараюсь подробно документировать все, что могу, чтобы не запутать себя илиЛюбой, кто читает этот пост.

Цель: Когда я отправляю форму, я хочу зашифровать $request->note, и я хочу расшифровать прямо перед тем, как позволить пользователю увидеть «заметку».

Прогресс на данный момент: Я успешно зашифровал записку при отправке формы, используя модельные мутаторы.Я могу показать пользователю на странице «Показать» единственную расшифрованную заметку.Однако на странице «указатель» я не могу показать заметки, и меня выдает ошибка «Полезная нагрузка недействительна».Что странно, потому что я успешно расшифровываю на странице шоу.Я получаю эту ошибку только в цикле foreach индексной страницы.Я сделал die / dump для моей Коллекции (переменная $notes), и я успешно извлекаю записи из базы данных, и коллекция возвращает зашифрованную заметку вместе с коллекцией.Я получаю сообщение об ошибке только при вызове $note->note в цикле foreach.Так что я немного растерялся.Что может сделать страница показа, когда при извлечении одной записи из базы данных не возвращаются какие-либо ошибки, но при извлечении нескольких записей из базы данных эта ошибка будет возвращаться?

Ошибка, которую я получаю.Отредактировал имя сайта и заменил на «SiteName».

Полезная нагрузка недействительна.(View: / Volumes / Secondary HDD / Sites / SiteName / resources / views / notes / index.blade.php)

Вот мой код с некоторыми комментариями, чтобы сделать вещи немного проще.Обратите внимание, что я публикую много кода.Это для того, чтобы показать страницу показа, не вызывая у меня никаких проблем, и как проиндексировать страницу.Я не уверен, в чем проблема.Поэтому я выкидываю как можно больше информации по этому вопросу, публикуя весь соответствующий код.

Note.php (Модель) Пространство имен приложения;

use Illuminate\Support\Facades\Crypt;
use Illuminate\Database\Eloquent\Model;

class Note extends Model
{

    // Define the relationship between Notes and Steps
    public function step() {
        return $this->belongsTo('App\Step');
    }

    // Encrypt the Note
    public function setNoteAttribute($value) {
        $this->attributes['note'] = Crypt::encryptString($value);
    }

    // Decrypt the Note
    public function getNoteAttribute($value) {
        return Crypt::decryptString($value);
    }
}

метод index () в NotesController.php

public function index()
{
    // Assign the user id a variable
    $user_id = Auth::user()->id;

    // Find all the notes written by the user
    $notes = Note::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->paginate(20);

    // Return the view with all the notes
    return view('notes.index')->withNotes($notes);
}

index.blade.php foreach loop

@foreach($notes as $note)
    <tr>
        <td class="text-center">{{ $note->step->number }}</td>
        <td>
            {{ substr(strip_tags(str_replace("&nbsp;", ' ', $note->note)), 0, 100) }}
            {{ strlen(strip_tags(str_replace("&nbsp;", ' ', $note->note))) > 100 ? "..." : "" }}
        </td>
        <td class="text-right">
            {!! Form::open(['route' => ['notes.destroy', $note->id], 'method' => 'DELETE']) !!}
                <a href="{{ route('notes.edit', $note->id) }}" class="btn btn-info btn-sm">Edit</a>

                {!! Form::submit('Delete', ['class' => 'btn btn-danger btn-sm']) !!}

            {!! Form::close() !!}
        </td>
    </tr>
@endforeach

show() Метод в NotesController.php

public function show($id)
{
    // Grab the Note by the ID from the Database
    $note = Note::find($id);

    // Assign the Authenticated User ID to a variable
    $user_id = Auth::User()->id;

    // Check the Authenticated User ID with the Note's User ID in the Database
    if(!$user_id === $note->user_id) {
        // Throw a 403 Error if it doesn't match
        return response(view('errors.403'), 403);
    }

    // Return the view with the Note
    return view('notes.show')->withNote($note);
}

show.blade.php без цикла foreach, поскольку я получаю только одну запись из базы данных

<div class="row">
    <div class="col-sm-8 offset-sm-2">
        <h3>Your Note</h3>
        <p>
            About: Step {{ $note->step->number }}
            <br>
            Created On: {{ date('M j, Y @ H:i', strtotime($note->created_at)) }}
            <br>
        </p>
        <hr>
        <p>
            {{ $note->note }}
        </p>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...