Как утвердить мульти-аутентификацию в laravel - PullRequest
0 голосов
/ 01 июня 2019

Привет, я работаю над мульти-аутентификацией 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 db:

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 вручную

1 Ответ

0 голосов
/ 01 июня 2019

внутри вашего 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);
}





}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...