Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan Sentinel untuk melaksanakan pengesahan keselamatan PHP

Menggunakan Sentinel untuk melaksanakan pengesahan keselamatan PHP

WBOY
WBOYasal
2023-07-25 22:29:19773semak imbas

Gunakan Sentinel untuk melaksanakan pengesahan keselamatan PHP

Dalam proses pembangunan aplikasi rangkaian, pengesahan keselamatan ialah pautan penting. Untuk melindungi data dan aplikasi pengguna, kami perlu mengesahkan pengguna dan mengawal hak akses. Dalam aplikasi PHP, Sentinel ialah perpustakaan pengesahan keselamatan yang sangat berkuasa dan fleksibel Ia menyediakan satu siri fungsi untuk melaksanakan pengesahan keselamatan, seperti pendaftaran pengguna, log masuk, pengurusan kebenaran, dll.

1. Pemasangan Sentinel

Menggunakan Composer untuk memasang Sentinel adalah cara paling mudah. Buka terminal, masukkan direktori projek anda, dan jalankan arahan berikut:

composer require cartalyst/sentinel

Ini melengkapkan pemasangan Sentinel.

2. Konfigurasi Sentinel

Selepas pemasangan selesai, kita perlu melakukan beberapa konfigurasi asas pada Sentinel. Cipta fail konfigurasi dalam aplikasi anda, seperti sentinel.php, dan tulis kandungan berikut: sentinel.php,然后写入以下内容:

<?php

return [
    'users' => [
        'model' => 'AppUser',
    ],

    'roles' => [
        'model' => 'AppRole',
    ],

    'permissions' => [
        'model' => 'AppPermission',
    ],

    'persistences' => [
        'model' => 'CartalystSentinelThrottlingEloquentPersistence',
    ],

    'persistences' => [
        'model' => 'CartalystSentinelThrottlingEloquentPersistence',
    ],

    'throttling' => [
        'model' => 'CartalystSentinelThrottlingEloquentThrottle',
    ],
];

这个配置文件指定了一些模型类的位置,Sentinel 会使用这些模型来与数据库进行交互。

接下来,我们需要创建一个 User 模型和一个 Role 模型。运行以下命令来生成这些文件:

php artisan make:model User
php artisan make:model Role

然后在这些模型中加入 Sentinel 提供的 trait:

<?php

namespace App;

use CartalystSentinelUsersEloquentUser;

class User extends EloquentUser
{
    // Your code here
}
<?php

namespace App;

use CartalystSentinelRolesEloquentRole;

class Role extends EloquentRole
{
    // Your code here
}

记得通过修改数据库配置文件 config/database.php 来连接上数据库。

三、用户注册和登录

现在我们已经完成了 Sentinel 的基本配置,接下来我们来实现用户注册和登录的功能。在 routes/web.php 文件中加入以下路由定义:

<?php

Route::get('/register', 'AuthController@registerForm');
Route::post('/register', 'AuthController@register');
Route::get('/login', 'AuthController@loginForm');
Route::post('/login', 'AuthController@login');
Route::get('/logout', 'AuthController@logout');

然后在 app/Http/Controllers/AuthController.php 中加入以下方法:

<?php

namespace AppHttpControllers;

use CartalystSentinelSentinel;
use IlluminateHttpRequest;

class AuthController extends Controller
{
    protected $sentinel;

    public function __construct(Sentinel $sentinel)
    {
        $this->sentinel = $sentinel;
    }

    public function registerForm()
    {
        return view('register');
    }

    public function register(Request $request)
    {
        $this->validate($request, [
            'username' => 'required|unique:users',
            'password' => 'required',
            'email' => 'required|email|unique:users',
        ]);

        $user = $this->sentinel->registerAndActivate([
            'username' => $request->input('username'),
            'password' => $request->input('password'),
            'email' => $request->input('email'),
        ]);

        // 登录用户
        $this->sentinel->login($user);

        return redirect('/home');
    }

    public function loginForm()
    {
        return view('login');
    }

    public function login(Request $request)
    {
        $credentials = [
            'username' => $request->input('username'),
            'password' => $request->input('password'),
        ];

        if ($this->sentinel->authenticate($credentials)) {
            return redirect('/home');
        } else {
            return back()->withErrors(['error' => '用户名或密码错误']);
        }
    }

    public function logout()
    {
        $this->sentinel->logout();

        return redirect('/login');
    }
}

这些方法分别实现了用户注册页面、注册逻辑、用户登录页面、登录逻辑以及用户登出逻辑。register和login方法中,我们使用了Sentinel提供的方法来完成用户注册和登录的逻辑。

四、访问权限控制

除了用户身份验证,Sentinel还提供了强大的访问权限控制功能。我们可以定义不同的角色和权限,并将其分配给用户。

app/Http/Controllers/AuthController.php 中添加以下方法:

public function assignRole($userId, $roleName)
{
    $user = $this->sentinel->findById($userId);
    $role = $this->sentinel->findRoleBySlug($roleName);
    
    $role->users()->attach($user);
}

public function removeRole($userId, $roleName)
{
    $user = $this->sentinel->findById($userId);
    $role = $this->sentinel->findRoleBySlug($roleName);
    
    $role->users()->detach($user);
}

public function checkPermission($userId, $permissionName)
{
    $user = $this->sentinel->findById($userId);
    
    if ($user->hasAccess($permissionName)) {
        echo "有权限";
    } else {
        echo "无权限";
    }
}

在这些方法中,我们使用了 Sentinel 提供的相关方法,如 findByIdfindRoleBySlugusersusersrrreee

Fail konfigurasi ini menentukan lokasi beberapa kelas model yang Sentinel akan gunakan untuk berkomunikasi dengan pangkalan data berinteraksi.

Seterusnya, kita perlu mencipta model User dan model Role. Jalankan arahan berikut untuk menjana fail ini:

rrreee

Kemudian tambahkan ciri yang disediakan oleh Sentinel pada model ini: 🎜rrreeerrreee🎜 Ingat untuk menyambung ke pangkalan data dengan mengubah suai fail konfigurasi pangkalan data config/database.php . 🎜🎜3. Pendaftaran dan log masuk pengguna🎜🎜Sekarang kita telah melengkapkan konfigurasi asas Sentinel, mari laksanakan fungsi pendaftaran dan log masuk pengguna. Tambahkan definisi laluan berikut dalam fail routes/web.php: 🎜rrreee🎜 Kemudian tambah kaedah berikut dalam app/Http/Controllers/AuthController.php: 🎜rrreee🎜 Kaedah ini melaksanakan halaman pendaftaran pengguna, logik pendaftaran, halaman log masuk pengguna, logik log masuk dan logik log keluar pengguna masing-masing. Dalam kaedah daftar dan log masuk, kami menggunakan kaedah yang disediakan oleh Sentinel untuk melengkapkan logik pendaftaran dan log masuk pengguna. 🎜🎜4. Kawalan kebenaran akses🎜🎜Selain pengesahan pengguna, Sentinel juga menyediakan fungsi kawalan kebenaran akses yang berkuasa. Kami boleh menentukan peranan dan kebenaran yang berbeza dan memberikannya kepada pengguna. 🎜🎜Tambah kaedah berikut dalam app/Http/Controllers/AuthController.php: 🎜rrreee🎜Dalam kaedah ini, kami menggunakan kaedah berkaitan yang disediakan oleh Sentinel, seperti findById , findRoleBySlug, pengguna, pengguna, dsb. untuk melaksanakan peruntukan dan pengesahan kebenaran. 🎜🎜5. Ringkasan🎜🎜Sentinel ialah perpustakaan pengesahan keselamatan PHP yang berkuasa, fleksibel dan mudah digunakan. Ia menyediakan satu siri fungsi seperti pendaftaran pengguna, log masuk dan pengurusan hak, yang boleh membantu kami mengendalikan isu pengesahan pengguna dan kawalan hak akses dengan mudah. Dengan mengikut langkah di atas untuk mengkonfigurasi dan menggunakan Sentinel, kami boleh memastikan bahawa aplikasi kami dilindungi secara berkesan dari segi keselamatan. 🎜

Atas ialah kandungan terperinci Menggunakan Sentinel untuk melaksanakan pengesahan keselamatan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn