اذهب إلى المحتوى
  • 0

مشاكل في إنشاء المستخدم بواسطة Laravel و Next Js

Majd Aust

السؤال

السلام عليكم و رحمة الله و بركاته

كنت اعمل على مشروع مع زميلي بالفريق الذي يستعمل Next Js و كنت استعمل Laravel

لكن المشروع كان يعمل و سبق و رفعناه على ال Server ولكن ملف AuthController لا ينشء مستخدمين على جهاز المطور

ها هو الكود خاصتي الذي لا عاد يعمل فجأة

<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\NormalUser;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Http\Requests\LoginRequest;
use App\Http\Resources\UserResource;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Http\Requests\RegisterRequest;
use Illuminate\Auth\Events\Registered;

class AuthController extends Controller

{

    public function register(Request $request)
    {
        $incomingFields = $request->validate([
            'name' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'name'), 'alpha'],
            'lName' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'lName'), 'alpha'],
            'email' => ['required', 'email', Rule::unique('normal_users', 'email')],
            'password' => ['required', 'min:10', 'max:200'],
            'occupation' => ['required'],
            'gender' => ['required'],
            'birthday' => ['required']
        ]);

        $incomingFields['password'] = bcrypt($incomingFields['password']);
        // if($request->hasFile('image')){
        // $incomingFields['image'] = $request->file('image')->store('images','public');
        // }

        $user = NormalUser::create($incomingFields);
        event(new Registered($user));
        return redirect('http://localhost:3000/');
    }

    // login a user method
    public function login(Request $request)
    {
        $incomingFields = $request->validate([
            'loginemail' => 'required',
            'loginpassword' => 'required'
        ]);

        $credentials = [
            'email' => $request->loginemail,
            'password' => $request->loginpassword
        ];

        if (Auth::guard('NormalUser')->attempt($credentials)) {
            return redirect('http://localhost:3000/');
        } else {
            return redirect('http://localhost:3000/signinfalse');
        }
    }

    // get the authenticated user method

    public function user($id)
    {
        $user = User::find($id);
        return response()->json($user);
    }

    public function show(Request $request)
    {
        $user = NormalUser::where('email', $request->email)->first();
        if ($user) {
            return response()->json([
                'status' => true,
                'message' => 'User found successfully.',
                'data' => $user
            ]);
        } else {
            return response()->json([
                'status' => false,
                'message' => 'User not found.',
            ]);
        }
    }

    public function editUser(Request $request)
    {
        // Retrieve the authenticated user
        $user = NormalUser::where('email', $request->email)->first();

        // Validate the incoming request
        $request->validate([
            'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);

        // Check if a new image file was uploaded
        if ($request->hasFile('image')) {
            // Get the new image file
            $image = $request->file('image');

            // Generate a unique filename for the new image
            $filename = uniqid() . '.' . $image->getClientOriginalExtension();

            // Move the new image file to the public/storage directory
            $image->storeAs('public/storage', $filename);

            // Update the user's image field with the new filename
            $user->image = $filename;
        }

        // Save the updated user to the database
        $user->save();

        // Return a response indicating success
        return response()->json([
            'status' => true,
            'message' => 'User updated successfully.',
        ]);
    }

    // public function editUser(Request $request){
    // }

    public function data(Request $request)
    {
        $user = NormalUser::where('email', $request->email)->first();

        if ($user) {
            return response()->json($user);
        } else {
            return response()->json([
                'status' => false,
                'message' => 'User not found.',
            ]);
        }
    }



    public function edit(Request $request)
    {
        $user = NormalUser::where('email', $request->email)->first();
        $incomingFields = $request->about;
        $user->about = $incomingFields;
        $user->save();
    }
}

شكرا جزيلا اخوتي

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

وعليكم السلام ورحمة الله وبركاته .

حسب الكود المرفق فانه لا يوجد اى مشاكل . وبما انه كان يعمل سابقا و لا يعمل الان فمن الممكن ان تكون المشكلة فى الواجهة الامامية او فى جزء اخر من الواجهة الخلفية .

لذلك لمساعدتك بشكل افضل فيجب ارسال رسالة الخطأ سواء فى الواجهة الخلفية او فى المتصفح لمعرفة مكان ونوع الخطأ .

وهل يمكنك ايضا ارسال نسخة من البيانات التى يتم ارسالها للواجهة الخلفية من الواجهة الامامية فمن الممكن انك ترسل بيانات ليست كاملة وبما انه يتم التحقق من البيانات اولا فمن اللمكن ان تكون هذه هى المشكلة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 دقائق مضت قال محمد_عاطف:

وعليكم السلام ورحمة الله وبركاته .

حسب الكود المرفق فانه لا يوجد اى مشاكل . وبما انه كان يعمل سابقا و لا يعمل الان فمن الممكن ان تكون المشكلة فى الواجهة الامامية او فى جزء اخر من الواجهة الخلفية .

لذلك لمساعدتك بشكل افضل فيجب ارسال رسالة الخطأ سواء فى الواجهة الخلفية او فى المتصفح لمعرفة مكان ونوع الخطأ .

وهل يمكنك ايضا ارسال نسخة من البيانات التى يتم ارسالها للواجهة الخلفية من الواجهة الامامية فمن الممكن انك ترسل بيانات ليست كاملة وبما انه يتم التحقق من البيانات اولا فمن اللمكن ان تكون هذه هى المشكلة

<div className='dark:bg-darkbg py-10 flex justify-center items-center'>
    <form method='POST' action='http://127.0.0.1:8000/register' className='bg-red-500 text-bluePrime font-bold flex flex-col gap-5'>
        <input onChange={(e) => setName(e.target.value)} type="text" name='name' placeholder="Name" />
        <input onChange={(e) => setemail(e.target.value)} type="email" name='email'  placeholder="Email" />
        <input onChange={(e) => setpassword(e.target.value)} type="password" name='password' placeholder="Password" />
        <button type="submit" className='p-8 bg-black text-white'>Register</button>
    </form>
</div>

و الخطأ الذي يجدث هو كود 302

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Majd Aust:
<div className='dark:bg-darkbg py-10 flex justify-center items-center'>
    <form method='POST' action='http://127.0.0.1:8000/register' className='bg-red-500 text-bluePrime font-bold flex flex-col gap-5'>
        <input onChange={(e) => setName(e.target.value)} type="text" name='name' placeholder="Name" />
        <input onChange={(e) => setemail(e.target.value)} type="email" name='email'  placeholder="Email" />
        <input onChange={(e) => setpassword(e.target.value)} type="password" name='password' placeholder="Password" />
        <button type="submit" className='p-8 bg-black text-white'>Register</button>
    </form>
</div>
 

و الخطأ الذي يجدث هو كود 302

اولا يجب على التسجيل ان يكون API وليس كما هو حاليا فى الكود فان 302 هو كود إعادة التوجيه لان التحقق من البيانات لم يتتحقق ولذلك يعيد توجيهك مع رسائل الخطأ .

الخطأ لديك انك لا ترسل البيانات المطلوبة التى تحتاجها الواجهة الخلفية .

فان حقل lName مطلوب و هو ليس موجود فى الواجهة الامامية . وايضا حقل occupation و gender و birthday فانت قمت بالتحقق فى الواجهة الخلفية منهم وان لم يكونوا موجودين فلن يتم انشاء المستخدم.

والحل هو اما تمريرهم من الواجهة الامامية او اذا لم يكونو مطلوبين فى قاعدة البيانات فيمكنك حذف هذا الكود من الملف لديك .و اسبتدالة بالتالى .

$incomingFields = $request->validate([
  'name' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'name'), 'alpha'],
  'email' => ['required', 'email', Rule::unique('normal_users', 'email')],
  'password' => ['required', 'min:10', 'max:200'],
]);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال محمد_عاطف:

اولا يجب على التسجيل ان يكون API وليس كما هو حاليا فى الكود فان 302 هو كود إعادة التوجيه لان التحقق من البيانات لم يتتحقق ولذلك يعيد توجيهك مع رسائل الخطأ .

الخطأ لديك انك لا ترسل البيانات المطلوبة التى تحتاجها الواجهة الخلفية .

فان حقل lName مطلوب و هو ليس موجود فى الواجهة الامامية . وايضا حقل occupation و gender و birthday فانت قمت بالتحقق فى الواجهة الخلفية منهم وان لم يكونوا موجودين فلن يتم انشاء المستخدم.

والحل هو اما تمريرهم من الواجهة الامامية او اذا لم يكونو مطلوبين فى قاعدة البيانات فيمكنك حذف هذا الكود من الملف لديك .و اسبتدالة بالتالى .

$incomingFields = $request->validate([
  'name' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'name'), 'alpha'],
  'email' => ['required', 'email', Rule::unique('normal_users', 'email')],
  'password' => ['required', 'min:10', 'max:200'],
]);

 

نسيت أن أذكر أن الحقول تلك غير ضرورية nullable و الخطأ يحدث أيضا عند استخدام API

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال Majd Aust:

نسيت أن أذكر أن الحقول تلك غير ضرورية nullable و الخطأ يحدث أيضا عند استخدام API

 

اذا كما اخبرتك قم بحذف الجزء من الكود الخاص بالتحقق منهم الذى يتحقق من ان يجب ان يكونو موجودين . وقم بحذفهم .

بتاريخ 32 دقائق مضت قال Majd Aust:
$incomingFields = $request->validate([
            'name' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'name'), 'alpha'],
            'lName' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'lName'), 'alpha'],
            'email' => ['required', 'email', Rule::unique('normal_users', 'email')],
            'password' => ['required', 'min:10', 'max:200'],
            'occupation' => ['required'],
            'gender' => ['required'],
            'birthday' => ['required']
        ]);

 لاحظ هنا انك تضع انهم required اى اذا لم يتم ارسالهم من الواجهة الامامية فلن يتم انشاء المستخدم.

وقم باستبدال الكود السابق بالكود الذى ارسلته له فى التعليق السابق.

بتاريخ 7 دقائق مضت قال محمد_عاطف:
$incomingFields = $request->validate([
  'name' => ['required', 'min:2', 'max:10', Rule::unique('normal_users', 'name'), 'alpha'],
  'email' => ['required', 'email', Rule::unique('normal_users', 'email')],
  'password' => ['required', 'min:10', 'max:200'],
]);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 دقائق مضت قال محمد_عاطف:

اذا كما اخبرتك قم بحذف الجزء من الكود الخاص بالتحقق منهم الذى يتحقق من ان يجب ان يكونو موجودين . وقم بحذفهم .

 لاحظ هنا انك تضع انهم required اى اذا لم يتم ارسالهم من الواجهة الامامية فلن يتم انشاء المستخدم.

وقم باستبدال الكود السابق بالكود الذى ارسلته له فى التعليق السابق.

 

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use Illuminate\Validation\Rules\Password;
class RegisteredUserController extends Controller
{
    /**
     * Handle an incoming registration request.
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function store(Request $request): Response
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
            'password' => ['required', 'confirmed', Password::defaults()],
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => $request->password,
        ]);

        event(new Registered($user));

        Auth::login($user);

        return response()->noContent();
    }
}

ما زال الخطأ موجود

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Majd Aust:

ما زال الخطأ موجود

هذا كود مختلف عن السابق الذى ارسلته حيث ان المشكلة السابقة تم حلها .

قم باسبتدال هذا السطر 

بتاريخ 4 دقائق مضت قال Majd Aust:
'password' => ['required', 'confirmed', Password::defaults()],

 

بالسطر هذا 

'password' => ['required'],

حيث انه كان مطلوب ان يكون هناك حقل اخر لتاكيد كلمة السر وانت لا تقوم بارساله . وايضا هنا قواعد للتحق من كلمة السر مثل يجب ان تتكون من حروف وارقام ولا تقل عن 8 خانات ولذلك قد قمنا بحذفهم.

ومن المفترض بعد هذا التعديل ان يتم حل المشكلة لديك ان شاء الله

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...