راکت

مشکل در وریفای شماره تلفن

40 پاسخ

سلام وقت بخیر
من ثبت نام با موبایل انجام دادم و کد برای کاربر ارسال میشه زمانی که میخام شماره تماس وریفای کنم ارور زیر دارم

Call to a member function activeCode() on null

متد scope وریفای


    public function scopeVerifyCode($query , $code,  $user)
    {
        return !! $user->activeCode()->whereCode($code)->where('expired_at' , '>' , now())->first();
    }

مشکل از ورودی ها هست ؟ به چه شکل باید بنویسم؟
کدهای کنترلر


    public function token(Request $request , User $user)
    {
        $request->validate([
            'token' => 'required'
        ]);

        $status = ActiveCode::verifyCode($request->token , $user->phone);

        if(! $status) {
            return redirect(route('phone.token'));
        }

        if(auth()->loginUsingId($user->id,$request->get('auth.remember'))) {
            $user->activeCode()->delete();
            return redirect('/home');
        }

        return redirect(route('phone.token'));
    }

دوستان لطفا اگه کسی میدونه راهنمایی کنید ممنون میشم

Paradox
Paradox
@paradox
ثبت پرسش جدید

پاسخ‌ها

40
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ActiveCode extends Model
{
    protected $fillable = [
        'user_id',
        'code',
        'expired_at'
    ];

    public $timestamps = false;

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    // public function scopeVerifyCode($query , $code,  $user)
    // {
    //     return !! $user->activeCode()->whereCode($code)->where('expired_at' , '>' , now())->first();
    // }

    public function scopeGenerateCode($query , $user)
    {
        $user->activeCode()->delete();

        do {
            $code = mt_rand(100000, 999999);
        } while($this->checkCodeIsUnique($user , $code));

        $user->activeCode()->create([
            'code' => $code,
            'expired_at' => now()->addMinutes(10)
        ]);

        return $code;
    }

    private function checkCodeIsUnique($user, int $code)
    {
        return !! $user->activeCode()->whereCode($code)->first();
    }

    private function getAliveCodeForUser($user)
    {
        return $user->activeCode()->where('expired_at' , '>' , now())->first();
    }
}
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

ببین مشکلت رو رابطست
فعلا برا راحتی و پاسخ سریع کد زیر رو جایگزاری کن تا رابطت بعدش اوکی کنیم

$count =ActiveCode::where('code',$request->token)->where('user_id',$user->id)->where('expired_at' , '>' , now())->count();
        dd($count);

شاید پاسخ شما همین‌جا باشد

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013
بازم همین نمایش میده

Illuminate\Database\Eloquent\Collection {#1097 ▼ // app\Http\Controllers\Auth\RegisterController.php:81
  #items: []
  #escapeWhenCastingToString: false
}
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

dd عوض شده count هست عزیز

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

مدل یوزر این عوض کن active قبلی dd بگیر

  public function activeCode()
    {
        return $this->hasMany(ActiveCode::class,'user_id','id');
    }
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013
ببخشید اشتباه فرستادم
خروجی

0 // app\Http\Controllers\Auth\RegisterController.php:89
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

تاریخ رو خروجی بگیر و توی دیتا بیس عکس بده از تاریخ توکن مقایسه چشمی کنیم

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013
مدل چیزی عوض کردم طبق چیزی که گفتید

Illuminate\Database\Eloquent\Collection {#1097 ▼ // app\Http\Controllers\Auth\RegisterController.php:81
  #items: []
  #escapeWhenCastingToString: false
}
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

خب نه این که خطا نیست مقدار بازگشتیش empty هست من بد میبینم همش
رابطه اوکیه ببخشید
تاریخ چک کن

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

الان 23 هستیم 19 نشون میده now ممکنه همخونی نداشته باشه به فرمت تاریح ساعت دقیقه dd بگیر

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

now()->format('Y M D'); 

باهاش ور برو فرمت درست بگیر ببین چ عددیه

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

ببین مشکلت همین خط کده
توکن نمیتونی بازیابی کنی از دیتابیس یه چیزی غلطه باید count بشه 1

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013

"2022 Nov Sun" // app\Http\Controllers\Auth\RegisterController.php:82
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

میتونم انی دسک بدم ؟

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

داداش سرچ کن به فرمت دیتابیست برسی ببینی ساعت چند میزنه now رو
مقایسه کن فرمت باید تست کنی

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013
فرمت های مختلف تست کردم داداش

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

any desk که نه امن نیست
اسکایپ یا تل بده
الان چی شد
تونستی به خروجی مد نظر برسی؟

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@salar.mohammad2013
نه داداش نتونستم هنوز
لینک اسکایپ
https://join.skype.com/invite/GaRiWTBK3QuS

صفحه 2 از 2

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

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