Estou tentando criar uma senha com hash para o Laravel. Agora alguém me disse para usar o auxiliar de hash do Laravel, mas não consigo encontrar ou estou olhando na direção errada.
Como faço para criar uma senha com hash laravel? E onde?
Edit: Eu sei qual é o código, mas não sei onde e como usá-lo, então ele me retorna a senha com hash. Se eu obtiver a senha com hash, posso inseri-la manualmente no banco de dados
php artisan tinker
. Por exemplo,echo Hash::make('yourpassword')
Respostas:
Fazendo hash de uma senha usando Bcrypt em
Laravel
:$password = Hash::make('yourpassword');
Isso criará uma senha com hash. Você pode usá-lo em seu controlador ou mesmo em um modelo, por exemplo, se um usuário enviar uma senha usando um formulário para o seu controlador usando o
POST
método, você pode fazer o hash usando algo assim:$password = Input::get('passwordformfield'); // password is form field $hashed = Hash::make($password);
Aqui,
$hashed
conterá a senha com hash. Basicamente, você vai fazê-lo ao criar / registrar um novo usuário, de modo que, por exemplo, se um usuário envia detalhes tais como,name
,email
,username
epassword
etc através de um formulário, em seguida, antes de inserir os dados no banco de dados, você vai botar o senha após validar os dados. Para obter mais informações, leia a documentação .Atualizar:
$password = 'JohnDoe'; $hashedPassword = Hash::make($password); echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
Portanto, você inserirá o
$hashedPassword
no banco de dados. Espero que agora esteja claro e se você ainda estiver confuso, sugiro que leia alguns tutoriais, assista a alguns screen cast em laracasts.com e tutsplus.com e também leia um livro sobreLaravel
, este é um ebook grátis , você pode baixá-lo.Atualização: Uma vez que
OP
deseja criptografar manualmente a senha usando o LaravelHash
sem nenhuma classe ou formulário, esta é uma maneira alternativa usando oartisan tinker
prompt de comando:Laravel
instalação (o diretório raiz do seu projeto)cd <directory name>
e pressione Enter no prompt de comando / terminalphp artisan tinker
e pressione Enterecho Hash::make('somestring');
Atualização (Laravel 5.x):
// Also one can use bcrypt $password = bcrypt('JohnDoe');
fonte
db
você precisa criptografá-la, então, a partir de uma senha simples, você a criptografará usandoHash::make('passwordstring');
e, em seguida, salvará essa senha com hash no banco de dados.Laravel 5 usa
bcrypt
. Então, você também pode fazer isso.$hashedpassword = bcrypt('plaintextpassword');
saída da qual você pode salvar no campo de senha da tabela do banco de dados.
Fn Ref: bcrypt
fonte
check
método:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }
Ref: laravel.com/docs/5.1/hashing Editar: Não se esqueça de votar positivamente na resposta se tiver ajudado;)A fachada do Laravel Hash fornece hashing Bcrypt seguro para armazenar senhas de usuários.
O uso básico requer duas coisas:
Primeiro inclua a fachada em seu arquivo
use Illuminate\Support\Facades\Hash;
e use o
Make
método para gerar a senha.$hashedPassword = Hash::make($request->newPassword);
e quando quiser corresponder à string Hashed, você pode usar o código a seguir:
Hash::check($request->newPasswordAtLogin, $hashedPassword)
Você pode aprender mais com o link do documento do Laravel abaixo para Hashing: https://laravel.com/docs/5.5/hashing
fonte
Para armazenar a senha no banco de dados, faça o hash da senha e salve.
$password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value
Para verificar a senha, obtenha a senha armazenada da conta do banco de dados
// $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 }
fonte
Se você quiser entender como exatamente o laravel funciona, você pode revisar a aula completa no Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php
Mas basicamente existem três métodos PHP envolvidos nisso:
$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 ));
A senha com hash é igual à senha laravel 5.x bcrypt. Não há necessidade de fornecer sal e custo, ele terá seus valores padrão.
Esses métodos foram implementados na classe laravel, mas se você quiser saber mais, revise a documentação oficial: http://php.net/manual/en/function.password-hash.php
fonte
Você pode usar o seguinte:
$hashed_password = Hash::make('Your Unhashed Password');
Você pode encontrar mais informações: aqui
fonte
No BcryptHasher.php você pode encontrar o código 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; }
fonte
use Illuminate\Support\Facades\Hash; if(Hash::check($plain-text,$hashed-text)) { return true; } else { return false; }
eg- $ plain-text = 'text'; $ hashed-text = Hash :: make ('text');
fonte
Aqui está a solução:
use Illuminate\Support\Facades\Hash; $password = request('password'); // get the value of password field $hashed = Hash::make($password); // encrypt the password
NB: Use o código de 1ª linha logo no início em seu controlador. Por último, mas não menos importante, use as duas linhas restantes de código dentro da função de seu controlador onde você deseja manipular os dados após o envio de from. Boa codificação :)
fonte
Compare a senha em laravel e lúmen:
Pode ser possível que a função bcrypt não funcione com php7, então você pode usar o código abaixo em laravel e lumen de acordo com seus requisitos:
use Illuminate\Support\Facades\Hash; $test = app('hash')->make("test"); if (Hash::check('test', $test)) { echo "matched"; } else { echo "no matched"; }
Espero que esta ajuda te faça feliz :)
fonte
ok, este é um extrato da função make em 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);
Basta copiar / colar em um arquivo php e executá-lo.
fonte