آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از Auth لاراول با جدول سفارشی و فیلدهای سفارشی

mohammadkhani  6 سال پیش  6 سال پیش
0 0

سلام

من به پروژه دارم که با لاراول هستش

یک جدول دارم به نام 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 پاسخ وجود دارد.
پاسخ به سوال 
امین علیپور  6 سال پیش
0 0

بله همچین چیزی امکان داره 

باید در قسمت کانفیگ auth که ادرسش به این صورت config/auth.php هست  مقدار کلید model که در کلید providers قراره داره رو تغییر بدید و هر مدلی که خواستید بذارید

0 0
ممنون از پاسختون من این کار رو انجام دادم حتی کلاس auth و provider هم ساختم اما کار نکرد احتمالا خیلی تغییرات باید داخلش داد (6 سال پیش)
0 0
الان چه مشکل یا اروری دارید ؟ (6 سال پیش)
پاسخ به سوال 
mohammadkhani  6 سال پیش
0 0

دو کد زیر در فایل 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

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .