首页 文章

如何在Laravel 5.2中为登录条件添加额外的逻辑

提问于
浏览
3

我只是想说如果用户不活跃,不允许登录 . 我已经制作了如下控制器,我不确定我在做什么,或者我还要做些什么才能完成这项工作!

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');
            }
        }

    }

我的想法是authenticate()方法应该做的伎俩!

有什么建议?

3 回答

  • 2

    我认为你应该创建方法来检查用户是否通过了你的凭据,这是我的建议:

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

    和您的登录方法:

    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();
    }
    

    希望你得到基本的想法 .

  • 3

    转到此路径:your-project-folder / vendor / laravel / framework / src / illuminate / Foundation / Auth / AuthenticatesUsers.php

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

    以下代码适用于我的情况:

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

    对于Laravel 5.3,需要在LoginController中添加以下代码

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

相关问题