Yêu cầu thg 10 8, 2020 6:45 SA 163 1 3
  • 163 1 3
+1

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

Chia sẻ
  • 163 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 CÂU TRẢ LỜI


Đã trả lời thg 10 8, 2020 7:41 SA
+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']);
    });
}
Chia sẻ
Đã trả lời thg 10 8, 2020 6:52 SA
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

Chia sẻ
Avatar Ngân Kim @ngankim
thg 10 8, 2020 6:54 SA

@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' 
Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 10 8, 2020 7:34 SA

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

Đã trả lời thg 10 8, 2020 7:17 SA
0

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.
}
Chia sẻ
Avatar morikun @thanhnguyen
thg 10 9, 2020 8:54 SA

@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 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí