جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
مشکات
3 سال پیش توسط مشکات مطرح شد
13 پاسخ

شرط به هنگام لاگین

سلام خسته نباشید
من میخوام کاربری که مقدار فیلد is_disable اش در دیتابیس یک نیست بتونه لاگین کنه
یعنی فقط کربران فعال حق لاگین کردن رو داشته باشن
میشه راهنماییم کنید چیکار کنم
این شرط رو ب چ صورت باید بنویسم؟


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

سلام وقتتون بخیر!
اگر میخواید کاری کنید که کاربر هایی که 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 = [

چرا گفتم باید اینکارو کنی؟ توی این روش هر درخواست کاربر بررسی میشه
و اگر بعد از لاگین کردنش شما اون رو غیرفعال کنید دیگه نمیتونه به فعالیتش ادامه بده توی روش قبلی فقط موقع لاگین بررسی میشد!


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
0

سلام
لطفا این رو هم توضیح بدید که میخواهید با ajax پیاده سازی کنید یا بدون ajax ؟


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

@gomnam
بدون ajax بزرگوار


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش آپدیت شد
0

اصلا کار سختی نیست
به مثال زیر توجه بفرمایید :
(این مثال با 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>";
  }

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

سلام.
شما باید با استفاده از شرط if این کار رو انجام بدین.

if($user->is_disable == 0) {
    //لاگین کردن کاربر
} else {
    return back();
}

موفق باشید.


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

@gomnam
@rezajahangir

@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');
    }
}

اینم کنترلر مربوط به لاگین هست

میشه راهنماییم کنید با توجه به این دوتا کد چطور شرط رو بنویسم


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

این فیلد is_disable به چه صورت هست؟
توسط ادمین باید 0 بشه یا اینکه کاربر باید ابتدا لینک فعال سازی رو تکمیل کنه تا واسش فعال بشه؟


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش آپدیت شد
0

@rezajahangir

توضیح تصویر رو وارد کنید

توی این قسمت که ادمین میتونه یه کاربر جدید رو ایجاد کنه میتونه این رو هم تعیین کنه ک کاربر فعال باشه یا غیر فعال
البته هرکاربری که رجیستز میکنه بصورت پیش فرض مقدار 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');
    }

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

از طریق همون شرط که بهتون گفتم میتونید این کارو رو انجام بدین، فقط باید validate کردن هم انجام بدین و بعد فیلد is_disable رو چک کنید و در آخر هم لاگین کنید.


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

@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

توضیح تصویر رو وارد کنید


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

توصیه من به شما اینه که مجدد داکیومنت لاراول رو مطالعه بفرمایید تا مفاهیم کامل واستون جا بیوفته.
اون شرطی که خدمتتون عرض کردم رو باید داخل کنترلر خودتون بنویسید نه داخل بلید.
امیدوارم ناراحت نشده باشید، چون هدف من کمک به دوستان هست.
موفق و مؤید باشید.


فرشید مرادی
تخصص : noob
@eniack 3 سال پیش آپدیت شد
0

سلام وقت بخیر ، در رابطه با اروری که دارید در صفحه 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 و سشن ادمین دارن رو اجازه دیدن صفحه پنل ادمین رو میده


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

سلام وقتتون بخیر!
اگر میخواید کاری کنید که کاربر هایی که 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 = [

چرا گفتم باید اینکارو کنی؟ توی این روش هر درخواست کاربر بررسی میشه
و اگر بعد از لاگین کردنش شما اون رو غیرفعال کنید دیگه نمیتونه به فعالیتش ادامه بده توی روش قبلی فقط موقع لاگین بررسی میشد!


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
1

@Rp76🌸☘️
@eniack
@rezajahangir
@gomnam
ازتون بی نهایت ممنونم بابت راهنمایی هاتون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام