Rumah >rangka kerja php >ThinkPHP >Cara menggunakan ThinkPHP6 untuk mencapai tiada log masuk diperlukan

Cara menggunakan ThinkPHP6 untuk mencapai tiada log masuk diperlukan

WBOY
WBOYasal
2023-06-20 22:39:311389semak imbas

ThinkPHP6 ialah rangka kerja PHP popular yang menyediakan alatan dan ciri yang berkuasa untuk membantu pembangun membina aplikasi web dengan cepat. Antaranya, melaksanakan fungsi bebas log masuk adalah sangat penting dalam banyak aplikasi.

Artikel ini akan memperkenalkan cara menggunakan ThinkPHP6 untuk melaksanakan fungsi tanpa log masuk, dan meneroka beberapa amalan dan teknik terbaik.

1 Fahami prinsip asas tanpa log masuk

Dalam proses tanpa log masuk, kita perlu memahami beberapa prinsip asas.

Pertama sekali, tanpa log masuk biasanya dilaksanakan berdasarkan mekanisme kuki atau sesi. Apabila pengguna log masuk ke aplikasi buat kali pertama, pelayan memberikan mereka pengecam unik (seperti ID sesi atau token). Pengecam ini kemudiannya boleh dihantar semula ke pelayan atas permintaan berikutnya oleh aplikasi untuk membuktikan bahawa pengguna telah disahkan. Ini menghapuskan keperluan untuk memasukkan nama pengguna dan kata laluan anda sekali lagi untuk mengakses halaman aplikasi yang dilindungi.

Kedua, kita perlu memahami cara menyimpan pengecam dalam kuki atau sesi. Dalam ThinkPHP6, anda boleh menggunakan fungsi sesi untuk mencapai operasi ini dengan mudah.

2. Gunakan ThinkPHP6 untuk merealisasikan fungsi tanpa log masuk

Di bawah, kami akan memperkenalkan langkah demi langkah cara menggunakan ThinkPHP6 untuk merealisasikan fungsi tanpa log masuk.

  1. Buat antara muka log masuk dan logik

Pertama, anda perlu mencipta antara muka log masuk dan logik. Kita boleh melakukan ini menggunakan borang HTML yang mudah. Apabila memproses permintaan log masuk, nama pengguna dan kata laluan perlu disahkan, dan ID sesi atau token dibuat untuk pengguna apabila berjaya log masuk. Jika log masuk gagal, maklumat ralat yang sepadan perlu dikembalikan.

Ini boleh dilakukan menggunakan kod berikut:

public function login()
{
    $data = $this->request->param();
    $user = UserModel::where('username', $data['username'])->find();
    if (!$user || $user['password'] != md5($data['password'])) {
        return ['code' => -1, 'msg' => '用户名或密码错误'];
    }
    // 登录成功,在session中保存用户信息
    session('user', $user);
    return ['code' => 0, 'msg' => '登录成功'];
}

Dalam kod di atas, kami mula-mula mendapatkan semula sama ada nama pengguna dan kata laluan yang dimasukkan oleh pengguna adalah sah. Jika sah, ID sesi atau token dibuat untuk pengguna dan disimpan pada pelayan. Jika log masuk gagal, mesej ralat dikembalikan.

  1. Membuat halaman yang dilindungi

Seterusnya, kita perlu mencipta satu atau lebih halaman yang dilindungi. Halaman ini hanya boleh diakses jika pengguna log masuk dan mempunyai ID atau token sesi yang sah. Jika tidak, pengguna akan dialihkan ke halaman log masuk. Ini boleh dicapai menggunakan kod berikut:

public function index()
{
    // 检查用户是否已登录
    $user = session('user');
    if (!$user) {
        return redirect('user/login');
    }
    return $this->fetch();
}

Dalam kod di atas, kami mula-mula menyemak sama ada pengguna telah log masuk. Jika pengguna log masuk, kandungan yang berkaitan dipaparkan. Jika pengguna tidak log masuk, ubah hala mereka ke halaman log masuk.

  1. Mencapai tanpa log masuk

Kini, kami boleh melaksanakan log masuk asas dan kawalan akses bagi halaman yang dilindungi. Walau bagaimanapun, atas dasar ini, kita perlu melaksanakan fungsi bebas log masuk.

Cara untuk mencapai tanpa log masuk adalah sangat mudah: simpan ID sesi atau token pengguna dalam kuki. Kemudian, apabila pengguna melawat aplikasi sekali lagi, nilai kuki ini boleh dihantar semula ke pelayan untuk membuktikan bahawa pengguna telah disahkan.

Ini boleh dicapai menggunakan kod berikut:

public function login()
{
    // 检查cookie中是否存在session ID或token
    $user = session('user');
    if ($user) {
        return redirect('user/index');
    }
    $data = $this->request->param();
    $user = UserModel::where('username', $data['username'])->find();
    if (!$user || $user['password'] != md5($data['password'])) {
        return ['code' => -1, 'msg' => '用户名或密码错误'];
    }
    // 登录成功,在session和cookie中保存用户信息
    session('user', $user);
    cookie('user_id', $user['id'], 3600 * 24 * 7);
    return ['code' => 0, 'msg' => '登录成功'];
}

Dalam kod di atas, kami mula-mula menyemak sama ada ID atau token sesi yang sah sudah wujud. Jika ada, ubah hala pengguna ke halaman yang dilindungi. Jika tidak, kami mengesahkan nama pengguna dan kata laluan dan apabila log masuk berjaya mencipta ID sesi atau token untuk pengguna dan menyimpannya pada pelayan. Selain itu, kami menyimpan ID pengguna dalam kuki untuk pengesahan pada permintaan masa hadapan.

Kami kemudiannya boleh menggunakan kod berikut dalam halaman yang dilindungi untuk menyemak ID pengguna yang disimpan dalam kuki dan mendapatkan semula maklumat pengguna yang sepadan dengan sewajarnya:

public function index()
{
    // 检查cookie中是否存在用户ID
    $user_id = cookie('user_id');
    if (!$user_id) {
        return redirect('user/login');
    }
    // 检索用户信息
    $user = UserModel::get($user_id);
    if (!$user) {
        return redirect('user/login');
    }
    return $this->fetch();
}

Dalam kod di atas, kami mula-mula menyemak sama ada kuki ID pengguna yang sah wujud. Jika ada, maklumat pengguna diambil menggunakan ID tersebut. Jika pengguna tidak ditemui, ubah hala pengguna ke halaman log masuk.

3. Amalan dan teknik terbaik

Apabila menggunakan ThinkPHP6 untuk melaksanakan tanpa log masuk, berikut ialah beberapa amalan dan teknik terbaik:

  1. Gunakan fungsi cincang selamat kata laluan. Dalam kod sampel, kami menggunakan fungsi md5 untuk pencincangan kata laluan. Walau bagaimanapun, ini tidak selamat kerana md5 boleh dipaksa dengan mudah. Adalah disyorkan untuk menggunakan fungsi cincang yang lebih selamat seperti bcrypt atau scrypt.
  2. Tetapkan kunci yang tidak boleh digunakan untuk kuki. Rahsia boleh ditetapkan menggunakan secret_key dalam fail config/app.php.
  3. Lebih pendek masa tamat tempoh kuki ditetapkan, lebih selamat. Jika tidak, jika kuki itu dicuri, penyerang boleh menggunakannya untuk pengesahan untuk masa yang lama.
  4. Pertimbangkan untuk menggunakan ciri ingat saya. Ciri ini akan memastikan kuki pengguna sah untuk masa yang lama, tetapi hanya akan tamat tempoh apabila pengguna log keluar secara aktif.

Secara umumnya, sangat mudah untuk menggunakan ThinkPHP6 untuk tidak mencapai log masuk. Ikuti amalan dan petua terbaik untuk memastikan aplikasi anda kekal selamat sambil melindungi pengguna.

Atas ialah kandungan terperinci Cara menggunakan ThinkPHP6 untuk mencapai tiada log masuk diperlukan. 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