Asked Oct 8th, 6:45 AM 121 1 3
  • 121 1 3
+1

Pro Laravel giúp em với ! Câu hỏi về Manually Authenticating trong Laravel

Share
  • 121 1 3

Em muốn custom lại điều kiện check login của laravel theo như 2 query bên dưới.

Có cách nào viết Auth::attempt() để nó thực hiện kiểm tra với query bên dưới ko ạ?

where email = $email AND password = $pw AND role in ('Admin', 'Admod') 

Và

where email = $email AND password = $pw AND role != 'ABC' 

Mong mọi người giúp đỡ ạ. e đang dùng laravel 8 ạ.
Em đọc thì có vẻ chỉ có so sánh equal chứ ko thấy có phủ định.
E cảm ơn

3 ANSWERS


Answered Oct 8th, 7:41 AM
+5

Bạn có thể tự viết 1 cái auth provider như này

<?php

namespace App\Auth;

use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\UserProvider as UserProviderInterface;

class UserProvider extends EloquentUserProvider implements UserProviderInterface
{
    protected function newModelQuery($model = null)
    {
        // Thêm đk cho query ở đây hoặc làm gì đó tùy bạn
        return parent::newModelQuery($model)->where('role', '!=', 'ABC');
    }
}

Xong rồi override cái eloquent provider bằng cái bạn vừa mới thêm ở file AuthServiceProvider.php như này

public function boot()
{
    $this->registerPolicies();

    Auth::provider('eloquent', function ($app, array $config) {
        return UserProvider(app('Illuminate\Contracts\Hashing\Hasher'), $config['model']);
    });
}
Share
Answered Oct 8th, 6:52 AM
0

Giờ bạn muốn custom thì bạn có thể tạo 1 route có đường dẫn giống hệt và gọi tới controller của bạn. Hoặc ở trong controller Auth mà laravel generate ra bạn có thể đặt một function giống hệt function laravel sử dụng để xử lý, lúc này function đó sẽ được overwrite lại bằng function bạn vừa tạo ra

Share
Ngân Kim @ngankim
Oct 8th, 6:54 AM

@duong.manh.hoang cảm ơn bạn. Mình đang ko hỏi về cách override.
Câu hỏi của mình là khi dùng hàm attempt. Thì có cách nào thêm condition cho nó, để nó check theo câu truy vấn kia ko 😄

where email = $email AND password = $pw AND role in ('Admin', 'Admod') 

Và

where email = $email AND password = $pw AND role != 'ABC' 
0
| Reply
Share
Dương Mạnh Hoàng @duong.manh.hoang
Oct 8th, 7:34 AM

@ngankim attempt thì thêm được điều kiện nhưng phủ định thì theo mình nghĩ là không

0
| Reply
Share
Answered Oct 8th, 7:17 AM
-1

Với Auth::attemp thì bạn cũng có thể thêm các điều kiện bổ sung vào truy vấn xác thực, vì nó nhận 1 array để check, ví dụ:

if (Auth::attempt(array('email' => $email, 'password' => $password, 'role_id' => 1])))
{
    // The user is active, not suspended, and exists.
}
Share
morikun @thanhnguyen
Oct 9th, 8:54 AM

@hoangminhhuet cái đó chắc bạn cũng biết rồi cậu ơi, cái bạn kia hỏi và có thể thêm điều điện bổ sung như "!=" hoặc là where in cơ. attempt chỉ nhận về mảng và nó sẽ so sánh bằng hết c ạ.
chắc chỉ còn cách của @phuongth thôi 😄

+1
| Reply
Share