首頁  >  文章  >  後端開發  >  為什麼 Laravel 5.2 中未定義「make:auth」指令以及如何手動設定身份驗證?

為什麼 Laravel 5.2 中未定義「make:auth」指令以及如何手動設定身份驗證?

Linda Hamilton
Linda Hamilton原創
2024-10-25 08:03:29891瀏覽

Why is the

Laravel 驗證:排除「make:auth 指令未定義」錯誤

嘗試在Laravel 5.2 中執行make:auth 指令時,您可能會遇到一條錯誤訊息,指出該命令未定義。出現此問題的原因有很多,我們將詳細探討。

對於 Laravel 5.2 及更早版本,make:auth 指令不可用。 Laravel 5.2 支援以下指令:

  • make:auth
  • make:console
  • make:controller
  • make:事件
  • make:作業
  • make:監聽器
  • make:中間件
  • make:遷移
  • make : model
  • make:policy
  • make:presenter
  • make:provider
  • make:repository
  • make:repository
  • make:repository
  • 🎜>make:seeder
  • make:test
make:transformer

    如果您使用Laravel 5.2,您可以透過以下方式手動建立身份驗證視圖和路由請依照以下步驟操作:
  1. 在routes目錄中建立routes.php檔案。

    <code class="php">// Authentication Routes...
    Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
    Route::post('login', 'Auth\LoginController@login')->name('login.post');
    Route::post('logout', 'Auth\LoginController@logout')->name('logout');
    
    // Registration Routes...
    Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
    Route::post('register', 'Auth\RegisterController@register')->name('register.post');
    
    // Password Reset Routes...
    Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
    Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
    Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
    Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');</code>
    將以下程式碼加入routes.php檔案:
  2. 在 app/Http/Controllers/Auth 目錄下建立 LoginController.php 檔案。

    <code class="php">namespace App\Http\Controllers\Auth;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\Route;
    
    class LoginController extends Controller
    {
        public function showLoginForm()
        {
            return view('auth.login');
        }
    
        public function login(Request $request)
        {
            $credentials = $request->only('email', 'password');
    
            if (Auth::attempt($credentials)) {
                // The user was authenticated
                return redirect()->intended(route('home'));
            }
    
            // The user could not be authenticated
            return redirect()->back()->withErrors(['email' => 'The provided credentials do not match our records.']);
        }
    
        public function logout(Request $request)
        {
            Auth::logout();
    
            return redirect()->route('login');
        }
    }</code>
    在 LoginController.php 檔案中加入以下程式碼:
  3. 在 app/Http/Controllers/Auth 目錄下建立 RegisterController.php 檔案。

    <code class="php">namespace App\Http\Controllers\Auth;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\Route;
    
    class RegisterController extends Controller
    {
        public function showRegistrationForm()
        {
            return view('auth.register');
        }
    
        public function register(Request $request)
        {
            $this->validate($request, [
                'name' => 'required|string|max:255',
                'email' => 'required|string|email|max:255|unique:users',
                'password' => 'required|string|min:6|confirmed',
            ]);
    
            // Create the user
            $user = User::create([
                'name' => $request->name,
                'email' => $request->email,
                'password' => bcrypt($request->password),
            ]);
    
            // Log the user in
            Auth::login($user);
    
            // Redirect the user to the home page
            return redirect()->route('home');
        }
    }</code>
    在 RegisterController.php 檔案中加入以下程式碼:
  4. 在 app/Http/Controllers/Auth 目錄下建立 ForgotPasswordController.php 檔案。

    <code class="php">namespace App\Http\Controllers\Auth;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Password;
    
    class ForgotPasswordController extends Controller
    {
        public function showLinkRequestForm()
        {
            return view('auth.passwords.email');
        }
    
        public function sendResetLinkEmail(Request $request)
        {
            $this->validate($request, [
                'email' => 'required|string|email|max:255',
            ]);
    
            // We will send the reset link to this user. Once we have attempted
            // to send the link, we will examine the response then see the message we
            // need to show to the user. Finally, we'll send out a proper
            // response.
            $response = Password::sendResetLink(
                $request->only('email')
            );
    
            switch ($response) {
                case Password::RESET_LINK_SENT:
                    return back()->with('status', __($response));
    
                case Password::INVALID_USER:
                    return back()->withErrors(['email' => __($response)]);
            }
        }
    }</code>
    將以下程式碼加入 ForgotPasswordController.php 檔案中:
  5. 在 app/Http/Controllers/Auth 目錄下建立 ResetPasswordController.php 檔案。

    <code class="php">namespace App\Http\Controllers\Auth;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Password;
    use Illuminate\Validation\ValidationException;
    
    class ResetPasswordController extends Controller
    {
        public function showResetForm(Request $request, $token = null)
        {
            return view('auth.passwords.reset')->with(
                ['token' => $token, 'email' => $request->email]
            );
        }
    
        public function reset(Request $request)
        {
            $request->validate([
                'token' => 'required',
                'email' => 'required|email',
                'password' => 'required|min:6|confirmed',
            ]);
    
            // Here we will attempt to reset the user's password. If it is successful we
            // will update the password on an existing user and return a response
            // indicating that the user's password has been reset.
            $response = Password::reset(
                $request->only('email', 'password', 'password_confirmation', 'token'),
                function ($user) use ($request) {
                    $user->forceFill([
                        'password' => Hash::make($request->password),
                        'remember_token' => Str::random(60),
                    ])->save();
    
                    // In case of large user base, it's recommended to use
                    // $user->setRememberToken(Str::random(60));
                    // $user->save();
                }
            );
    
            switch ($response) {
                case Password::PASSWORD_RESET:
                    return redirect()->route('login')->with('status', __($response));
    
                default:
                    throw ValidationException::withMessages([
                        'email' => [__($response)],
                    ]);
            }
        }
    }</code>
    在 ResetPasswordController.php 檔案中加入以下程式碼:
開啟 resources/views/auth 目錄並建立您的視圖。

完成這些步驟後,您的 Laravel 5.2 應用程式中應該有一個有效的身份驗證系統。

對於 Laravel >= 6

composer require laravel/ui
php artisan ui vue --auth
php artisan migrate
在 Laravel 6 及更高版本中,make:auth 命令已替換為 ui 命令。若要使用此命令建立驗證視圖和路由,請執行下列命令:

此命令將安裝 Laravel UI 套件並建立必要的驗證視圖、路由和遷移。

以上是為什麼 Laravel 5.2 中未定義「make:auth」指令以及如何手動設定身份驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn