簡體   English   中英

如何在laravel 5.3中進行自定義身份驗證

[英]How to make custom auth in laravel 5.3

我在Laravel 5.3自定義身份驗證中遇到問題,當我檢查Auth::check()它返回false時,想要使用我自己的函數或頁面。 這是用戶控制器:

namespace App\Http\Controllers;

use App\User;
use Illuminate\Support\Facades\Session;
use validatior;
use Auth;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function postSignUp(Request $request)
    {
        $validation = \Validator::make($request->all(), [
            'email' => 'email|required|unique:users',
            'password' => 'required|min:4'
        ]);

        if ($validation->fails()) {
            return redirect()->back()->withErrors($validation->errors());
        } else {
            $user = new User();
            $user->email = $request->get("email");
            $user->password = bcrypt($request->get['password']);
            $user->save();
        }

        return redirect('signupPage');
    }

    public function postSignIn(Request $request)
    {
        $this->validate($request, [
            'email' => 'required',
            'password' => 'required',
        ]);

        if (Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
            return redirect('users/profile');
        }

        dd(Auth::check());
        exit;
    }
}

登錄后我想在個人資料頁面重定向,但我的情況不起作用。 我的路線是:

Route::group(['prefix' => 'users'], function(){
    Route::group(['middleware' => 'guest'], function(){
        Route::get('/signupPage','UserController@getSignUp');
        Route::post('/register',array ('as'=>'signup', 'uses' =>'UserController@postSignUp', ));
        Route::get('signInPage', array('as' => 'signInPage', 'uses' => 'UserController@getSignIn'));
        Route::post('/postLogin', array('as' => 'postLogin', 'uses' => 'UserController@postSignIn'));
    });

    Route::group(['middleware' => 'auth'], function(){
        Route::get('/profile', array('as' => 'profile', 'uses' => 'UserController@getProfile'));
        Route::get('/logout', array('as'=>'logout', 'uses'=> 'UserController@logout'));
    });
});

以下是您的代碼的一些修改

public function postSignUp(Request $request)
    {
        $email = $request->input('email');
        $pass = $request->input('password');
        $validation = \Validator::make($request->all(), [
            'email' => 'email|required|unique:users',
            'password' => 'required|min:4'
        ]);
        if ($validation->fails()) {
            return redirect()->back()->withErrors($validation->errors());
        } else {
            $pas = bcrypt($pass);
            $user = new User();
            $user->email = $email;
            $user->password = $pas;
            $user->save();
        }

        return redirect('users/signInPage');
    }

注冊用戶時請使用bcrypt,因為此功能默認由Auth Attempt功能使用

public function postSignIn(Request $request)
    {
        $this->validate($request, [
            'email' => 'required',
            'password' => 'required',

        ]);
        $email= $request->input['email'];
        $password= $request->input['password'];
        if (Auth::attempt(['email'=>$email,'password'=>$password']))
        {
            return redirect('users/profile');
        }

        return redirect('users/signInPage')->withErrors(['failure' => 'The credentials you entered did not match our records. Try again!',]);
    }

最后,當你使用默認的中間件時,這會給你太多的重定向錯誤,因為你的邏輯現在與默認的那個不同,這就是你必須編寫自定義中間件的原因,為此運行這個命令php artisan make:middleware CutomAuth這將創建你的自定義中間件現在由你的邏輯編寫代碼並在app/Http/Kernel.php注冊為\\ 'customauth' => \\Illuminate\\Auth\\Middleware\\CutomAuth::class,你很高興去

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM