• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel błąd __construct() must be an instance of

Object Storage Arubacloud
0 głosów
111 wizyt
pytanie zadane 28 lipca 2020 w PHP przez Greeenone Pasjonat (16,100 p.)

Hejka

Mam pewien problem ze zmodyfikowanym kodem w laravelu. Do mojego projektu dodałem Sanctum. Jak wiadomo, dodaje on do bazy token, user_id etc. Zmodyfikowałem kod tak, aby zapisywałby także IP osoby logującej się. Wszystko działa dobrze (stworzenie tokenu, id, ip i zapisanie do bazy danych) po za jednym detalem: Laravel  zwraca następujący błąd

Argument  1 passed to Laravel\Sanctum\NewAccessToken::__construct() must be an  instance of Laravel\Sanctum\PersonalAccessToken, instance of  App\PersonalAccessTokens given, called in...

Jak wykonałem modyfikację kodu:

1. Stworzyłem model PersonalAccessTokens do którego dodałem proteced filable

2. W pliku AppServiceProvider, funkcji boot dodałem następujący kod:

Sanctum::usePersonalAccessTokenModel('App\PersonalAccessTokens');

3. Do modelu User dodałem następujący kod:

public function createToken(string $name, array $abilities = ['*']) { 
$token = $this->tokens()->create([
'name' => $name, 
'ip_address' => request()->ip(), 
'token' => hash('sha256', $plainTextToken = Str::random(80)),
'abilities' => $abilities, 
]); 

return new NewAccessToken($token, $token->id.'|'.$plainTextToken); }

4. Tworze token następująco:

$token = $user->createToken($request->device_name)->plainTextToken;

A tutaj constructor z sanctuma:

<?php

namespace Laravel\Sanctum;

use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;

class NewAccessToken implements Arrayable, Jsonable
{
    /**
     * The access token instance.
     *
     * @var \Laravel\Sanctum\PersonalAccessToken
     */
    public $accessToken;

    /**
     * The plain text version of the token.
     *
     * @var string
     */
    public $plainTextToken;

    /**
     * Create a new access token result.
     *
     * @param  \Laravel\Sanctum\PersonalAccessToken  $accessToken
     * @param  string  $plainTextToken
     * @return void
     */
    public function __construct(PersonalAccessToken $accessToken, string $plainTextToken)
    {
        $this->accessToken = $accessToken;
        $this->plainTextToken = $plainTextToken;
    }

    /**
     * Get the instance as an array.
     *
     * @return array
     */
    public function toArray()
    {
        return [
            'accessToken' => $this->accessToken,
            'plainTextToken' => $this->plainTextToken,
        ];
    }

    /**
     * Convert the object to its JSON representation.
     *
     * @param  int  $options
     * @return string
     */
    public function toJson($options = 0)
    {
        return json_encode($this->toArray(), $options);
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 29 lipca 2020 przez mordimer Mądrala (5,720 p.)
wybrane 29 lipca 2020 przez Greeenone
 
Najlepsza
spróbuj w pliku NewAccessToken dodać do usów

use App\PersonalAccessTokens;

Podobne pytania

0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 24 lipca 2020 w PHP przez Greeenone Pasjonat (16,100 p.)
0 głosów
1 odpowiedź 583 wizyt
0 głosów
0 odpowiedzi 121 wizyt
pytanie zadane 8 lipca 2020 w PHP przez Greeenone Pasjonat (16,100 p.)

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...