استفاده از Auth لاراول با جدول سفارشی و فیلدهای سفارشی
مدیریت گفتگو
سلام
من به پروژه دارم که با لاراول هستش
یک جدول دارم به نام prj_user که در این جدول اطلاعات کاربران ذخیره میشه.
فیلد ها جدول در زیر نوشته شده.
CREATE TABLE IF NOT EXISTS `prj_user` (
`usr_user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`usr_firstname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`usr_lastname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`usr_email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`usr_pass` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`usr_created_at` timestamp NULL DEFAULT NULL,
`usr_updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`usr_user_id`),
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
برای این جدول یه مدل ساختم به نام UserCustom.php در آدرس app /Models
فولدر Models خودم ایجاد کردم و تمامی مدل های پروژه اونجا ذخیره می کنم.
کد های زیر کد مدل UserCustom.php است.
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserCustom extends Model
{
public $table='prj_user';
public $primaryKey='usr_user_id';
const CREATED_AT='usr_created_at';
const UPDATED_AT='usr_updated_at';
protected $fillable = [
'usr_user_id',
'usr_firstname',
'usr_lastname',
'usr_email',
'usr_pass',
'usr_lastname',
'usr_created_at',
'usr_updated_at',
];
}
من می خوام auth::attempt و بقیه متد های کلاس auth به این جدول custom و این مدل custom وصل بشه.
من دیگه نمی خوام از مدل User و جدول User پیش فرض لاراول استفاده کنم.
آیا میشه لاراول در این حد سفارشی سازی کرد؟
آیا همچنین چیزی امکان داره؟
پاسخها 2
بله همچین چیزی امکان داره
باید در قسمت کانفیگ auth که ادرسش به این صورت config/auth.php هست مقدار کلید model که در کلید providers قراره داره رو تغییر بدید و هر مدلی که خواستید بذارید

نظرات
دو کد زیر در فایل config/auth اضافه کردم
'guards' => [
'usercustom' => [
'driver' => 'session',
'provider' => 'userCustomProvider',
],
],
'providers' => [
'userCustomProvider' => [
'driver' => 'eloquent',
'model' => App\Models\UserCustom::class,
],
],
بعد در فولدر Providers دو تا کلاس ساختم CustomAuthProvider و CustomUserProvider
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Auth;
use App\Providers\CustomUserProvider;
use Illuminate\Support\ServiceProvider;
class CustomAuthProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->app['auth']->extend('usercustom',function()
{
return new CustomUserProvider();
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
<?php
namespace App\Providers;
use App\Models\UserCustom;
use Carbon\Carbon;
use Illuminate\Auth\GenericUser;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
class CustomUserProvider implements UserProvider {
/**
* Retrieve a user by their unique identifier.
*
* @param mixed $identifier
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveById($identifier)
{
// TODO: Implement retrieveById() method.
$qry = UserCustom::where('usr_user_id','=',$identifier);
if($qry->count() >0)
{
$user = $qry->select('usr_user_id', 'usr_firstname', 'usr_last_name', 'usr_email', 'usr_pass')->first();
$attributes = array(
'usr_user_id' => $user->usr_user_id,
'usr_firstname' => $user->usr_firstname,
'usr_last_name' => $user->usr_last_name,
'usr_email' => $user->usr_email,
'usr_pass' => $user->usr_pass,
);
return $user;
}
return null;
}
/**
* Retrieve a user by by their unique identifier and "remember me" token.
*
* @param mixed $identifier
* @param string $token
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByToken($identifier, $token)
{
// TODO: Implement retrieveByToken() method.
$qry = UserCustom::where('usr_user_id','=',$identifier);
if($qry->count() >0)
{
$user = $qry->select('usr_user_id', 'usr_firstname', 'usr_last_name', 'usr_email', 'usr_pass')->first();
$attributes = array(
'usr_user_id' => $user->usr_user_id,
'usr_firstname' => $user->usr_firstname,
'usr_last_name' => $user->usr_last_name,
'usr_email' => $user->usr_email,
'usr_pass' => $user->usr_pass,
);
return $user;
}
return null;
}
/**
* Update the "remember me" token for the given user in storage.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param string $token
* @return void
*/
public function updateRememberToken(Authenticatable $user, $token)
{
// TODO: Implement updateRememberToken() method.
$user->setRememberToken($token);
$user->save();
}
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials)
{
// TODO: Implement retrieveByCredentials() method.
$qry = UserCustom::where('usr_email','=',$credentials['usr_email']);
if($qry->count() > 0)
{
$user = $qry->select('usr_user_id','usr_email','usr_pass')->first();
return $user;
}
return null;
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
* @return bool
*/
public function validateCredentials(Authenticatable $user, array $credentials)
{
// TODO: Implement validateCredentials() method.
// we'll assume if a user was retrieved, it's good
// DIFFERENT THAN ORIGINAL ANSWER
if($user->email == $credentials['usr_email'] && Hash::check($credentials['usr_pass'], $user->getAuthPassword()))//$user->getAuthPassword() == md5($credentials['password'].\Config::get('constants.SALT')))
{
//$user->last_login_time = Carbon::now();
$user->save();
return true;
}
return false;
}
}
بعد دو تا روت ساختم
Route::get('user/login','UserController@loginForm');
Route::post('user/login','UserController@loginCheck');
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function loginForm () {
return view('login');
}
public function loginCheck (Request $request) {
$credentials=array([
'usr_email'=> $request->email,
'usr_pass'=>$request->password
]);
if (Auth::guard('usercustom')->attempt($credentials)){
echo "1";
}else {
echo "0";
}
}
}
کلاس مدل هم در اول تاپیک نوشتم
وقتیکه به دستور Auth::guard میرسه ارور زیر رو میده
خیلی تو اینترنت گشتم نتونستم این مشکلو حل کنم
مشکل در فیلدهای جدوله لاراول به طور پیش فرض فیلد email و password می خواد.درصورتیکه من اون ها رو تغییر دادم به usr_email و usr_pass
نظرات
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .

نظرات