#php #laravel
Вопрос:
Я пытаюсь создать панель управления с помощью laravel 8 для игры с открытым исходным кодом, в которой уже есть база данных с другим именем таблицы аутентификации и столбцами. Моя цель-создать эту панель для регистрации,входа в систему (показать некоторые данные), восстановления электронной почты с паролем и изменения электронной почты с паролем. Таблица пользователей теперь является таблицей учетных записей, и я видел сотни сообщений как в stackoverflow, так и на других форумах, которые, как они говорят, следуют тем же шагам. Новый файл миграции, новый файл модели, измените config/auth.php настройки
Дело в том, что когда я меняю таблицу пользователей на таблицу учетных записей, кажется, что все работает. Пользователь может зарегистрироваться и войти в систему, но когда я пытаюсь получить информацию о пользователях в своем blade.php с помощью {{Auth::user()}} Он показывает число 0, и если я хочу показать {{Auth::user->любой столбец}}, он выбирает первую строку в таблице. Я ищу ответ в Интернете уже 3 дня безрезультатно и перепробовал множество различных методов, чтобы это сработало. Где-то я видел, что это ядро laravels, касающееся аутентификации, и вам нужно переименовать каждый класс, в котором есть пользователи. Я застрял. Вот мой код.
Контроллер входа в систему (я использовал другой метод хэширования, а не bcrypt, так как игровой сервер поддерживает это)
<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateHttpRequest;
use Auth;
use AppModelsUser;
class LoginController extends Controller
{
public function login()
{
return view('auth.login');
}
public function authenticate(Request $request)
{
$request->validate([
'email' => 'required|string',
'password' => 'required|string',
]);
$user = User::where([
'email' => $request->email,
'password' => base64_encode(hash("sha1", $request->password, true))
])->first();
if ($user) {
Auth::login($user);
return redirect()->intended('home')->with('success', 'Your Account has been registered.');
}
return redirect('login')->with('error', 'Oppes! You have entered invalid credentials');
}
public function logout() {
Auth::logout();
return redirect('login');
}
}
My User Class
<?php
namespace AppModels;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;
use Auth;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'users',
'email',
'password',
];
protected $primaryKey = 'login';
protected $table = 'accounts';
public $timestamps = false;
protected $rememberTokenName = false;
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
My auth.php
<?php
return [
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'accounts',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'accounts',
],
],
'providers' => [
'accounts' => [
'driver' => 'eloquent',
'model' => AppModelsUser::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'accounts' => [
'provider' => 'accounts',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];