کیارش مالکی
4 سال پیش توسط کیارش مالکی مطرح شد
5 پاسخ

تغییر جدول در authentication

سلام وقت بخیر.
من می خوام برای authentication به جای جدول users از جدول accounts استفاده کنه باید چی کار کنم و تنظیمات رو چطور انجام بدم.
ممنون از دوستان


ثبت پرسش جدید
محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش آپدیت شد
1

@nader.register
اول کلاس زیر رو داخل مدل account یوز کن.
Illuminate\Foundation\Auth\User as Authenticatable

حالا مدلت باید از این کلاس ارث بری کنه.
حالا داخل config/auth.php باید مثل توضیحات بالا باید guard خودتو مشخص کنی که در اینجا اسمشو گذاشتیم account چون در واقع لاراول با همین گارد ها اعتبار سنجی رو میفهمه.

  <?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'account' => [
            'driver' => 'session',
            'provider' => 'accounts',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [

        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'accounts' => [
            'driver' => 'eloquent',
            'model' => //your model namespace,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    auth()->guard('account')->attempt();

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];

حالا در همین config/auth.php انتهای فایل provider خودتو ریجیستر میکنی که لاراول بدونه از کدوم مدل باید برای این گارد که ثبت کردی برا احراز هویست استفاده کنه که در اینجا اسم جدولتو که accounts هست میذاری

'providers' => [

        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'accounts' => [
            'driver' => 'eloquent',
            'model' => //your model namespace,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

حالا وقتی میخوای احراز هویت یا هر کاری کنی اول گارد رو صدا میزنی به صورت زیر

 auth()->guard('account')->attempt()

or

auth()->guard('account')->user()

یا اگه میخوای فقط از این گارد استفاده کنی برو گارد دیفالت رو داخل config/auth.php عوض کن که همون بالای صفحست که شما به جای web میذاری account ای که تعریف کردی و دیگه نیاز نیست هر بار گارد رو مثل بالا صدا بزنی:

  'defaults' => [
        'guard' => 'account',
        'passwords' => 'users',
    ],

محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش مطرح شد
1

سلام. شما باید چنتا کار انجام بدید. اول اینکه باید از همون مواردی که خود مدل یوزر extend شده)(کلاس authenticate) در این مدل هم از همونا دقیقا ارث بری کنید. مورد دوم اینکه باید گارد خودتون رو درون پشه کانفیگ در فایل auth دقیقا مثل گاردهای لاراول اما با نام متفاوت تعریف کنید و برای این گارد یک provider یا همون جدول مشخص کنید و در انتها این provider رو در انتهای همین فایل ثبت کنید. اگه وارد فایل Auth که گفتم بشید کاملا خود کامنتای لاراول هم کمکتون میکنه. یادتون باشه اگه میخواید از گارد دیگه برای اعتبار سنجی استفاده کنید یا باید گارد جدید رو جای گارد دیفالت قرار بدید یا باید موقع اعتبارسنجی گارد رو مشخص کنید تا لاراول بفهمه از کدوم جدول یا همون provider دارید برای اعتبار سنجی استفاده میکنید


کیارش مالکی
تخصص : Backend developer
@nader.register 4 سال پیش مطرح شد
0

سلام متوجه نمی شم. واضح تر بگید.اگرم مقدور هست مثال بزنید.ممنونم. @mohammadeng3731


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش آپدیت شد
1

@nader.register
اول کلاس زیر رو داخل مدل account یوز کن.
Illuminate\Foundation\Auth\User as Authenticatable

حالا مدلت باید از این کلاس ارث بری کنه.
حالا داخل config/auth.php باید مثل توضیحات بالا باید guard خودتو مشخص کنی که در اینجا اسمشو گذاشتیم account چون در واقع لاراول با همین گارد ها اعتبار سنجی رو میفهمه.

  <?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'account' => [
            'driver' => 'session',
            'provider' => 'accounts',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [

        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'accounts' => [
            'driver' => 'eloquent',
            'model' => //your model namespace,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    auth()->guard('account')->attempt();

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];

حالا در همین config/auth.php انتهای فایل provider خودتو ریجیستر میکنی که لاراول بدونه از کدوم مدل باید برای این گارد که ثبت کردی برا احراز هویست استفاده کنه که در اینجا اسم جدولتو که accounts هست میذاری

'providers' => [

        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'accounts' => [
            'driver' => 'eloquent',
            'model' => //your model namespace,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

حالا وقتی میخوای احراز هویت یا هر کاری کنی اول گارد رو صدا میزنی به صورت زیر

 auth()->guard('account')->attempt()

or

auth()->guard('account')->user()

یا اگه میخوای فقط از این گارد استفاده کنی برو گارد دیفالت رو داخل config/auth.php عوض کن که همون بالای صفحست که شما به جای web میذاری account ای که تعریف کردی و دیگه نیاز نیست هر بار گارد رو مثل بالا صدا بزنی:

  'defaults' => [
        'guard' => 'account',
        'passwords' => 'users',
    ],

کیارش مالکی
تخصص : Backend developer
@nader.register 4 سال پیش آپدیت شد
0

خب من فیلدهام کلا فرق داره با جدول users چطور validation و ... رو چک کنم؟
و این کد برا چی هستش که در مدل نوشته شده؟

use Notifiable;

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام