سلام وقتتون بخیر!
اگر میخواید کاری کنید که کاربر هایی که isdisable هنوز ۱ نشده بتونند از سایت استفاده کنند باید اینکار هارو کنید.
php artisan make:middleware CheckUserIsDisabled
با کد بالا یک middleware میسازیم که کار middleware ها چک کردن درخواست ها قبل از route هاست که توی این مسیر ذخیره میشن
app/Http/Controllers/Middleware
تابع handel رو باید خودت بنویسی مثل کد من
public function handle(Request $request, Closure $next)
{
if (Auth::check() and Auth::user()->role_id != 1)
return $next($request);
abort(403);
}
بعد از این ها کار تمومه فقط یکاری میمونه اون هم معرفی middleware هست
که توی این ادرس app/Http/Kernel.php باید اضافش کنی به ارایه protected $middlewareGroups = [
چرا گفتم باید اینکارو کنی؟ توی این روش هر درخواست کاربر بررسی میشه
و اگر بعد از لاگین کردنش شما اون رو غیرفعال کنید دیگه نمیتونه به فعالیتش ادامه بده توی روش قبلی فقط موقع لاگین بررسی میشد!
اصلا کار سختی نیست
به مثال زیر توجه بفرمایید :
(این مثال با PHP Pure )
if(isset($_POST['login'])){
$email = $_POST['email'];
$pass = $_POST['password'];
$sql="SELECT * FROM `user` WHERE `email`=? AND `password`=?";
$r_user = $conn->prepare($sql);
$r_user->bindValue(1,$email);
$r_user->bindValue(2,$pass);
$r_user->execute();
if($r_user->rowCount() == 1){
header("location:../../index.php?coo=true&email=$email&password=$pass");
foreach($r_user as $user){
if($user['is_disable'] != 1){
$error = "<div class='alert alert-danger d-flex' role='alert'><div>شما نمیتوانید ورود کنید</div></div>";
}
else{
هر کاری جهت login
}
}
}
else{
$error = "<div class='alert alert-danger d-flex' role='alert'><div>کاربری با این مشخصات وجود ندارد</div></div>";
}
سلام.
شما باید با استفاده از شرط if این کار رو انجام بدین.
if($user->is_disable == 0) {
//لاگین کردن کاربر
} else {
return back();
}
موفق باشید.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
ویوی مربوط به لاگینم این هست
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
اینم کنترلر مربوط به لاگین هست
میشه راهنماییم کنید با توجه به این دوتا کد چطور شرط رو بنویسم
این فیلد is_disable به چه صورت هست؟
توسط ادمین باید 0 بشه یا اینکه کاربر باید ابتدا لینک فعال سازی رو تکمیل کنه تا واسش فعال بشه؟
توی این قسمت که ادمین میتونه یه کاربر جدید رو ایجاد کنه میتونه این رو هم تعیین کنه ک کاربر فعال باشه یا غیر فعال
البته هرکاربری که رجیستز میکنه بصورت پیش فرض مقدار isdisableصفر هست و این یعنی کاربر فعاله
public function store(Request $request)
{
$data = $request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
if (isset($_POST['is_disable'])) {
$_POST['is_disable'] = 1;
} else
$_POST['is_disable'] = 0;
if (isset($_POST['is_superuser'])) {
$_POST['is_superuser'] = 1;
} else
$_POST['is_superuser'] = 0;
if (isset($_POST['is_staff'])) {
$_POST['is_staff'] = 1;
} else
$_POST['is_staff'] = 0;
User::create([
'name'=>$data['name'],
'email'=>$data['email'],
'password'=>Hash::make(($data['password'])),
'is_disable'=>$_POST['is_disable'],
'is_superuser'=>$_POST['is_superuser'],
'is_staff'=>$_POST['is_staff'],
]);
alert()->success('کاربر با موفقیت ایجاد شد.' , 'Message')->persistent('Ok');
return redirect('/admin/users');
}
از طریق همون شرط که بهتون گفتم میتونید این کارو رو انجام بدین، فقط باید validate کردن هم انجام بدین و بعد فیلد is_disable رو چک کنید و در آخر هم لاگین کنید.
@rezajahangir
این رو ببینید لطفا
این ارور رو دارم
@foreach($users as $user)
@if($user->is_disable == 0)
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@endforeach
توصیه من به شما اینه که مجدد داکیومنت لاراول رو مطالعه بفرمایید تا مفاهیم کامل واستون جا بیوفته.
اون شرطی که خدمتتون عرض کردم رو باید داخل کنترلر خودتون بنویسید نه داخل بلید.
امیدوارم ناراحت نشده باشید، چون هدف من کمک به دوستان هست.
موفق و مؤید باشید.
سلام وقت بخیر ، در رابطه با اروری که دارید در صفحه header.php خط 21 متغیر $users رو نمیشناسه !! این متغیر از کجا میاد و کارش چی هست؟
و در رابطه با سئوال بهترین کار این هست که شما یک میدلویر ست کنین کاربرانی که فعال هستند قابلیت لاگین داشته باشن ، من یه مثال میزنم واستون شما طریقه اضافه شدن میدلویر رو سرچ کنین و برای سایت خودتون قرار بدید.
if($request->user()->isSuperuser() || $request->user()->isStaff()){
if($request->session()->has('admin')){
return $next($request);
}else{
return redirect('admin/login');
}
این کد داخل میدلویر به این صورت هست که فقط کاربرانی که مدیر هستند یعنیissuperuserو کارمند هستند isstaff و سشن ادمین دارن رو اجازه دیدن صفحه پنل ادمین رو میده
سلام وقتتون بخیر!
اگر میخواید کاری کنید که کاربر هایی که isdisable هنوز ۱ نشده بتونند از سایت استفاده کنند باید اینکار هارو کنید.
php artisan make:middleware CheckUserIsDisabled
با کد بالا یک middleware میسازیم که کار middleware ها چک کردن درخواست ها قبل از route هاست که توی این مسیر ذخیره میشن
app/Http/Controllers/Middleware
تابع handel رو باید خودت بنویسی مثل کد من
public function handle(Request $request, Closure $next)
{
if (Auth::check() and Auth::user()->role_id != 1)
return $next($request);
abort(403);
}
بعد از این ها کار تمومه فقط یکاری میمونه اون هم معرفی middleware هست
که توی این ادرس app/Http/Kernel.php باید اضافش کنی به ارایه protected $middlewareGroups = [
چرا گفتم باید اینکارو کنی؟ توی این روش هر درخواست کاربر بررسی میشه
و اگر بعد از لاگین کردنش شما اون رو غیرفعال کنید دیگه نمیتونه به فعالیتش ادامه بده توی روش قبلی فقط موقع لاگین بررسی میشد!
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟