【问题标题】:How to approve multi-authentication in laravel如何在 laravel 中批准多重身份验证
【发布时间】:2019-06-01 08:33:36
【问题描述】:

他正在使用 Laravel 多重身份验证,它工作正常,管理员重定向到管理页面,用户重定向到主页,但我希望如果用户没有被批准,那么它不应该登录并看到错误“您可以在您的帐户被批准后 24 小时后登录"

我在管理中间件中添加了这段代码,但它不起作用:

if (auth()->check() && $request->user()->status == 0) {
    return redirect()->guest('login');
}else{
    return redirect('login')->with('flash_message_error','You can  login after approval');
}

管理中间件:

public function handle($request, Closure $next)
{
    if (auth()->check() && $request->user()->admin == 0) {
        return redirect()->guest('home');
    }        
    return $next($request);
}

路线:

Route::group(['middleware' => ['web','auth']], function(){
    Route::get('/home', function(){
        if (Auth::user()->admin == 0) {
            return view('home');
         }else {
             $users['users'] = \App\User::all();
             return view('adminhome', $users);
         }
    });
});

用户模型:

protected $fillable = [
    'name', 'email', 'password', 'admin',
];

这个 id 数据库迁移:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->boolean('admin')->default(0);
    $table->boolean('approved')->default(0);
    $table->rememberToken();
    $table->timestamps();
});

我只是希望当用户注册时它应该等到数据库中的已批准列手动变为 1

【问题讨论】:

    标签: laravel eloquent laravel-5.7


    【解决方案1】:

    在您的Auth/LoginController 中添加以下方法

    namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use AuthenticatesUsers;
    
    use Illuminate\Support\Facades\Hash;
    use App\User;
    class LoginController extends Controller
    {
    
     protected function credentials(Request $request)
    {
        $credentials = $request->only($this->username(), 'password');
        $credentials['status'] = 1;
        return $credentials;
    }
    
    
     protected function sendFailedLoginResponse(Request $request)
    {
        $errors = [$this->username() => trans('auth.failed')];
        // Load user from database
    
        $user = \App\User::where($this->username(), $request->{$this->username()})->first();
    
        // Check if user was successfully loaded, that the password matches
        // and status is not 1. If so, override the default error message.
    
    
        if ($user && \Hash::check($request->password, $user->password) && $user->status != 1) {
    
            $errors = [$this->username() => 'you can login after 24hr after your account will be approved'];
        }
        if ($request->expectsJson()) {
            return response()->json($errors, 422);
        }
        return redirect()->back()
            ->withInput($request->only($this->username(), 'remember'))
            ->withErrors($errors);
    }
    
    
    
    
    
    }
    

    【讨论】:

    • 语法错误,文件意外结束,期待函数 (T_FUNCTION) 或 const (T_CONST) ibb.co/k9p1nGk
    • 这是语法错误,请确保您的代码中有正确的左括号和右括号
    • 只在你的登录控制器中添加两个函数
    • 方法 App\Http\Controllers\Auth\LoginController::login 不存在。这是当前登录控制器 paste.ofcode.org/SFAkA3qaab9kmjKKmUjLSS 的完整代码
    • 错误是 App\Http\Controllers\Auth 文件夹中不存在 LoginController
    猜你喜欢
    • 2018-07-21
    • 2018-10-17
    • 2021-02-08
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2019-05-14
    • 2015-08-21
    相关资源
    最近更新 更多