Saya mencoba membuat kata sandi berciri untuk Laravel. Sekarang seseorang mengatakan kepada saya untuk menggunakan hash helper Laravel tetapi saya tidak dapat menemukannya atau saya melihat ke arah yang salah.
Bagaimana cara membuat kata sandi berciri laravel? Dan dimana?
Sunting: Saya tahu apa kodenya tetapi saya tidak tahu di mana dan bagaimana menggunakannya sehingga memberi saya kembali kata sandi yang di-hash. Jika saya mendapatkan kata sandi yang di-hash, maka saya dapat memasukkannya secara manual ke dalam database
php artisan tinker
. Misalnya,echo Hash::make('yourpassword')
Jawaban:
Hashing Kata Sandi Menggunakan Bcrypt di
Laravel
:$password = Hash::make('yourpassword');
Ini akan membuat kata sandi berciri. Anda dapat menggunakannya di pengontrol Anda atau bahkan dalam model, misalnya, jika pengguna mengirimkan kata sandi menggunakan formulir ke pengontrol Anda menggunakan
POST
metode, maka Anda dapat mencirikannya menggunakan sesuatu seperti ini:$password = Input::get('passwordformfield'); // password is form field $hashed = Hash::make($password);
Di sini,
$hashed
akan berisi kata sandi yang di-hash. Pada dasarnya, Anda akan melakukannya saat membuat / mendaftar pengguna baru, sehingga, misalnya, jika A menyampaikan pengguna Rincian seperti,name
,email
,username
danpassword
lain-lain menggunakan formulir, maka sebelum Anda memasukkan data ke dalam database, Anda akan hash kata sandi setelah memvalidasi data. Untuk informasi lebih lanjut, baca dokumentasinya .Memperbarui:
$password = 'JohnDoe'; $hashedPassword = Hash::make($password); echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
Jadi, Anda akan memasukkan ke
$hashedPassword
dalam database. Semoga sudah jelas sekarang dan jika masih bingung maka saya sarankan Anda untuk membaca beberapa tutorial, menonton beberapa screen cast di laracasts.com dan tutsplus.com dan juga membaca buku diLaravel
, ini adalah ebook gratis , Anda dapat mendownloadnya.Pembaruan: Karena
OP
ingin mengenkripsi kata sandi secara manual menggunakan LaravelHash
tanpa kelas atau formulir apa pun, jadi ini adalah cara alternatif menggunakanartisan tinker
dari command prompt:Laravel
instalasi (direktori root proyek Anda)cd <directory name>
dan tekan enter dari command prompt / terminalphp artisan tinker
dan tekan enterecho Hash::make('somestring');
Perbarui (Laravel 5.x):
// Also one can use bcrypt $password = bcrypt('JohnDoe');
sumber
db
Anda perlu mengenkripsinya jadi, dari kata sandi biasa Anda akan mengenkripsinya menggunakanHash::make('passwordstring');
dan kemudian menyimpan kata sandi berciri ini di database.Laravel 5 menggunakan
bcrypt
. Jadi, Anda juga bisa melakukan ini.$hashedpassword = bcrypt('plaintextpassword');
output yang dapat Anda simpan ke bidang kata sandi tabel database Anda.
Referensi Fn: bcrypt
sumber
check
metode:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }
Ref: laravel.com/docs/5.1/hashing Edit: Jangan lupa untuk memberi suara positif pada jawaban jika membantu Anda;)Fasad Laravel Hash menyediakan hashing Bcrypt yang aman untuk menyimpan kata sandi pengguna.
Penggunaan dasar membutuhkan dua hal:
Pertama, sertakan Fasad di file Anda
use Illuminate\Support\Facades\Hash;
dan gunakan
Make
Metode untuk menghasilkan kata sandi.dan ketika Anda ingin mencocokkan string Hashed Anda dapat menggunakan kode di bawah ini:
Anda dapat mempelajari lebih lanjut dengan tautan dokumen Laravel di bawah ini untuk Hashing: https://laravel.com/docs/5.5/hashing
sumber
Untuk menyimpan kata sandi di database, buat hash kata sandi lalu simpan.
$password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value
Untuk memverifikasi kata sandi, dapatkan kata sandi yang disimpan akun dari database
// $user is database object // $inputs is Input from user if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) { // Password is not matching } else { // Password is matching }
sumber
Jika Anda ingin memahami cara kerja laravel yang luar biasa, Anda dapat meninjau kelas lengkapnya di Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php
Tetapi pada dasarnya ada tiga metode PHP yang terlibat di dalamnya:
$pasword = 'user-password'; // To create a valid password out of laravel Try out! $cost=10; // Default cost $password = password_hash($pasword, PASSWORD_BCRYPT, ['cost' => $cost]); // To validate the password you can use $hash = '$2y$10$NhRNj6QF.Bo6ePSRsClYD.4zHFyoQr/WOdcESjIuRsluN1DvzqSHm'; if (password_verify($pasword, $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } //Finally if you have a $hash but you want to know the information about that hash. print_r( password_get_info( $password_hash ));
Kata sandi yang di-hash sama dengan kata sandi laravel 5.x bcrypt. Tidak perlu memberi garam dan biaya, itu akan mengambil nilai defaultnya.
Metode-metode tersebut telah diterapkan di kelas laravel, tetapi jika Anda ingin mempelajari lebih lanjut, harap tinjau dokumentasi resmi: http://php.net/manual/en/function.password-hash.php
sumber
Anda dapat menggunakan berikut ini:
$hashed_password = Hash::make('Your Unhashed Password');
Anda dapat menemukan informasi lebih lanjut: di sini
sumber
Di BcryptHasher.php Anda dapat menemukan kode hash:
public function make($value, array $options = array()) { $cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds; $hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost)); $hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost)); echo $value.' '.PASSWORD_BCRYPT.' '.$cost.' '; echo $hash;die(); if ($hash === false) { throw new RuntimeException("Bcrypt hashing not supported."); } return $hash; }
sumber
use Illuminate\Support\Facades\Hash; if(Hash::check($plain-text,$hashed-text)) { return true; } else { return false; }
misalnya- $ plain-text = 'text'; $ hashed-text = Hash :: make ('text');
sumber
Inilah solusinya:
use Illuminate\Support\Facades\Hash; $password = request('password'); // get the value of password field $hashed = Hash::make($password); // encrypt the password
NB: Gunakan kode baris pertama di awal pengontrol Anda. Terakhir, gunakan dua baris kode lainnya di dalam fungsi pengontrol Anda di mana Anda ingin memanipulasi dengan data setelah dari dikirimkan. Selamat coding :)
sumber
Bandingkan kata sandi di laravel dan lumen:
Ini mungkin karena fungsi bcrypt tidak berfungsi dengan php7 maka Anda dapat menggunakan kode di bawah ini di laravel dan lumen sesuai kebutuhan Anda:
use Illuminate\Support\Facades\Hash; $test = app('hash')->make("test"); if (Hash::check('test', $test)) { echo "matched"; } else { echo "no matched"; }
Saya harap, bantuan ini akan membuat Anda bahagia :)
sumber
ok, ini adalah ekstrak dari fungsi make di hash.php
$work = str_pad(8, 2, '0', STR_PAD_LEFT); // Bcrypt expects the salt to be 22 base64 encoded characters including // dots and slashes. We will get rid of the plus signs included in the // base64 data and replace them with dots. if (function_exists('openssl_random_pseudo_bytes')) { $salt = openssl_random_pseudo_bytes(16); } else { $salt = Str::random(40); } $salt = substr(strtr(base64_encode($salt), '+', '.'), 0 , 22); echo crypt('yourpassword', '$2a$'.$work.'$'.$salt);
Cukup salin / tempel ke file php dan jalankan.
sumber