How to add extra logic on login condition in Laravel 5.2

别来无恙 提交于 2019-12-07 01:29:06

问题


I just wanted to say if the user is not active, don't allow to login. I have made the controller as below, I am not sure what I am miising or what else I have to do here to make this work!


    namespace App\Http\Controllers\Auth;

    use Illuminate\Auth\Authenticatable;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use App\User;
    use Validator;
    use App\Http\Controllers\Controller;
    use Illuminate\Foundation\Auth\ThrottlesLogins;
    use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

    class AuthController extends Controller{
        use AuthenticatesAndRegistersUsers, ThrottlesLogins;

        protected $redirectTo = '/home';


        public function __construct()
        {
            $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
        }


        protected function validator(array $data)
        {
            return Validator::make($data, [
                'name' => 'required|max:255',
                'email' => 'required|email|max:255|unique:users',
                'password' => 'required|min:6|confirmed',
            ]);
        }


        protected function create(array $data)
        {
            return User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
            ]);
        }

        public function authenticate()
        {
            if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
                // Authentication passed...
                return redirect()->intended('dashboard');
            }
        }

    }

My thinking was authenticate() method should do the trick!

Any suggestions?


回答1:


i think you should create method to check if user passed your credentials, here's my suggestion :

protected function getCredentials(Request $request)
{
    return [
        'username' => $request->input('email'),
        'password' => $request->input('password'),
        'active' => true
    ];
}

and your login method:

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

    if (Auth::guard()->attempt($this->getCredentials($request))){
        //authentication passed
    }

    return redirect()->back();
}

hope you get basic idea.




回答2:


The below code worked for my case:

protected function getCredentials(Request $request)
    {
        return [
            'email' => $request->input('email'),
            'password' => $request->input('password'),
            'active' => true
        ];
    }

for Laravel 5.3 need to add following code to LoginController

protected function credentials(Request $request)
    {
        return [
            'email' => $request->input('email'),
            'password' => $request->input('password'),
            'active' => true
        ];
    }



回答3:


Go to this path : your-project-folder/vendor/laravel/framework/src/illuminate/Foundation/Auth/AuthenticatesUsers.php

$credentials=$request->only($this->loginUsername(), 'password');
$credentials['status'] = '1';
return $credentials;


来源:https://stackoverflow.com/questions/38032556/how-to-add-extra-logic-on-login-condition-in-laravel-5-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!