I made a crud user but I have a problem with the password hashing.
@extends('superadmin.layouts.app')
@section('content')
<div class="container-fluid">
<div class="row">
<!-- left column -->
<div class="col-md-12">
<!-- general form elements -->
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title">New User</h3>
</div>
<!-- /.card-header -->
<!-- form start -->
<form method="POST" action="{{ route('user.store') }}" enctype="multipart/form-data">
@csrf
<div class="card-body">
<div class="form-group">
<label for="exampleInputEmail1">Name</label>
<input type="text" class="form-control" placeholder="Enter Name" name="name" required>
</div>
@error('name')
<div class="col-12">
<div class="alert alert-danger">{{ $message }}</div>
</div>
@enderror
<div class="form-group">
<label for="exampleInputFile">Image</label>
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" id="Image" name="image" required>
<label class="custom-file-label" for="exampleInputFile">Choose file</label>
</div>
</div>
</div>
@error('image')
<div class="col-12">
<div class="alert alert-danger">{{ $message }}</div>
</div>
@enderror
<div class="form-group">
<label for="exampleInputEmail1">Secret word</label>
<input id="secretword" type="text" class="form-control @error('secretword') is-invalid @enderror" name="secretword" value="{{ old('secretword') }}" required autocomplete="secretword" autofocus>
</div>
@error('secretword')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<div class="form-group">
<label for="exampleInputEmail1">Telegram</label>
<input id="telegram" type="text" class="form-control @error('telegram') is-invalid @enderror" name="telegram" value="{{ old('telegram') }}" required autocomplete="telegram" autofocus>
</div>
@error('telegram')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<div class="form-group">
<label for="exampleInputEmail1">Email</label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
</div>
@error('email')
<div class="col-12">
<div class="alert alert-danger">{{ $message }}</div>
</div>
@enderror
<div class="form-group">
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
</div>
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<div class="form-group">
<label for="password-confirm" class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label>
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<!-- /.card-body -->
<div class="card-footer pt-0">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
<!--/.col (right) -->
</div>
<!-- /.row -->
</div>
@endsection
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$users = User::latest()->paginate(50);
return view('superadmin.user.index', compact('users'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
$usersall = User::all();
return view('superadmin.user.create');
}
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'secretword' => 'required',
'email' => 'required',
'password' => 'required',
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$input = $request->all();
if ($image = $request->file('image')) {
$destinationPath = public_path('images/');
$profileImage = date('YmdHis') . "." . $image->getClientOriginalExtension();
$image->move($destinationPath, $profileImage);
$input['image'] = "$profileImage";
}
User::create($input);
return redirect()->route('user.index')
->with('success', 'User created');
}
/**
* Display the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
$user = User::find($id);
return view('superadmin.user.edit', compact('user'));
}
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required',
'telegram' => 'required',
'secretword' => 'required',
]);
$input = $request->all();
$user = User::find($id);
$user->name = $request->name;
$user->telegram = $request->telegram;
$user->secretword = $request->secretword;
$user->save();
return redirect()->route('user.index')->with('success','User updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
$users = User::find($id);
$users->delete();
return redirect()->route('user.index')->with('success', 'Utilisateur supprime');
}
}
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateDatabaseEloquentModel;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;
use QirolabLaravelReactionsTraitsReacts;
use QirolabLaravelReactionsContractsReactsInterface;
class User extends Authenticatable implements ReactsInterface
{
use HasApiTokens, HasFactory, Notifiable, Reacts;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
'secretword',
'image',
'telegram',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this
->belongsToMany(Role::class)
->withTimestamps();
}
public function users()
{
return $this
->belongsToMany('AppUser')
->withTimestamps();
}
public function authorizeRoles($roles)
{
if ($this->hasAnyRole($roles)) {
return true;
}
abort(401, 'This action is unauthorized.');
}
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
public function hasRole($role)
{
if ($this->roles()->where('name', $role)->first()) {
return true;
}
return false;
}
};
I would like to make a hash of the password but I can’t. I saw in the documentation that it is necessary to do Hash::make() but I don’t understand where I have to do this. Could someone put me the line of code that needs to be done for hash and or tell me where I need to put it? Thanks for the help
2
Answers
A call to
$request->validate()
returns anarray
of validated data. So what you can do is save that return value to a variable, then access thepassword
element on thearray
in order to hash it before providing everything to yourUser::create()
method.try with this method bcrypt function is in laravel that give you a hash password easly.