frzne_rf
5 سال پیش توسط frzne_rf مطرح شد
2 پاسخ

حذف پسورد از لاگین و رجیستر

سلام دوستان.
من توی پروژه ام نیاز به احراز هویت بدون پسورد دارم. (مثل تلگرام و ...)
یعنی هر کاربر بدون رمز عبور لاگین بشه. بعد احراز هویت با پیامک انجام بشه.
چطور میتونم این کار رو انجام بدم . لطفا راهنمایی بفرمایید.
ممنون


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
0

یک مسیر برای خودت مشخص میکنی، داده های که میخوای مثلا شماره موبایل رو به اون مسیر ارسال میکنی
اگر در دیتابیس وجود داشت خب میری برای ارسال پیامک که از سایت کاوه نگار یا قاصدک استفاده کن
در نهایت کدراندومی برای اون شماره ایجاد میکنی و در دیتابیس براش ذخیره میکنی و براش پیامک میکنی و از کاربر میخوای کدی که پیامک شده رو وارد کنه و شما به یک مسیر دیگه برای بررسی ارال میکنی => آخرین رکورد و رمز ایجاد شده رو چک میکنی در صورت درست بودن لاگینش میکنی.


Mohammad Amin Mokhtari
تخصص : برنامه نویس
@amin.mokhtari94 5 سال پیش آپدیت شد
0

سلام
به این نوع احراز هویت به اصطلاح OTP می گویند
راهنمایی کلی :
شما باید فیلد شماره تلفن رو به جدول کاربران اضافه کنید و فیلد های password ، remembertoken و همچنین جدول passwordresets رو حذف کنید.
کنترلر ResetPasswordController و ForgotPasswordController و ConfirmPasswordController رو حدف کنید.

رووت زیر رو به routes/web.php اضافه میکنیم

Route::get('sendotp', 'Auth\LoginController@sendOTP')->name('sendotp');

و
در فایل LoginController کد زیر رو اضافه میکنیم :


/
  ارسال رمز یکباز مصورف به کاربر و ذخیره در سشن

  @return \Illuminate\Http\Response
 /
public function sendOTP(Request $request)
{
    session()->forget('code');
    $request->validate([
        $this->username() => 'required|string',
    ]);

    $phone=$request->get('phone');
    $code=rand(10000, 99999);
    SMS::send($phone,$code);
    session()->pull('code',$code);
    return view('auth.loginotp');
}

/
  Validate the user login request.

  @param \Illuminate\Http\Request $request
  @return void

  @throws \Illuminate\Validation\ValidationException
 /
protected function validateLogin(Request $request)
{
    return;
}

/
  Attempt to log the user into the application.

  @param \Illuminate\Http\Request $request
  @return bool
 /
protected function attemptLogin(Request $request)
{
    $code=$request->get('code');
    return $code==session()->get('code');
}

/
  Get the login username to be used by the controller.

  @return string
 /
public function username()
{
    return 'phone';
}

در فایل resources/views/auth/login.blade.php :

@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('sendotp') }}">
                            @csrf

                            <div class="form-group row">
                                <label for="phone" class="col-md-4 col-form-label text-md-right">شماره</label>

                                <div class="col-md-6">
                                    <input id="phone" type="phone" class="form-control @error('phone') is-invalid @enderror" name="phone" value="{{ old('phone') }}" required autocomplete="phone" autofocus>

                                    @error('phone')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                    @enderror
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    <button type="submit" class="btn btn-primary">
                                        ادامه
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

فایل resources/views/auth/loginotp.blade.php رو ایجاد میکنیم:

@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('sendotp') }}">
                            @csrf

                            <div class="form-group row">
                                <label for="code" class="col-md-4 col-form-label text-md-right">کد ارسالی</label>

                                <div class="col-md-6">
                                    <input id="code" type="text" class="form-control @error('code') is-invalid @enderror" name="code" value="{{ old('code') }}" required autocomplete="code" autofocus>

                                    @error('code')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                    @enderror
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    <button type="submit" class="btn btn-primary">
                                        ادامه
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

در این روش دیگه نیازی به میدلور ساختن نیست و جایگزین همان میدلور auth پیشفرض لاراول می شود
هیچ کدوم از کدها تست نشده ولی خب نقشه راهی میتونه باشه برای شما، برای ثبت نام هم باید کارهایی از همین قبیل رو انجام بدین
البته که بهتره از ایجکس هم استفاده کنید
موفق باشید


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

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