私はLaravel 5.4とそのAuth APIを使用しています。 is_admin
という表にusers
という表に列を追加しました。 is_admin == 1
の場合にのみログインが動作するようにログインプロセスを変更したいと思います。私はIlluminate\Foundation\Auth\AuthenticatesUsers.php
(Github)を見ましたが、おそらくそこに変更を加えることができましたが、できるだけコアを乱すことはありません。これを行うよりエレガントな方法はありますか?ログイン前にLaravelの認証を確認する
答えて
これは@Sagarに似た解決策でアローラの。 artisan make:auth
を実行したときに作成されたapp\Http\Controllers\Auth\LoginController.php
には、メソッドをAuthenticatesUsers
から上書きしました。これはLoginController.php
のコードです:
protected function attemptLogin(Request $request)
{
return (auth()->attempt(['email' => $request->email, 'password' => $request->password, 'is_admin' => 1]));
}
今is_admin == 1
を持つユーザーのみがログインされます
あなたのように自分のログイン機能を作成することができます:あなたは追加のフィールドと、ここで手動ログインプロセスをチェックする
if (Auth::attempt(['email' => $email, 'password' => $password, 'is_admin' => 1])) {
// The user is active, not suspended, and exists.
}
:だからあなたのログイン機能では、あなたがすることによってこれを確認することができます
https://laravel.com/docs/5.4/authentication#authenticating-users ありがとう
もっと良い方法は、実際にすべてのユーザーにログインさせることです。そして、admin
ミドルウェア経由でアクセスを制限する。この方法で、このミドルウェアを好きなだけ多くのルートに適用することができます。
あなたがapp\Http\Middleware\RedirectIfNotAdmin
を作成
Route::group(['middleware' => 'admin'], function() {
// auth protected routes
});
この方法でラップする必要経路でそれを使用してください:app\Http\Kernel.php
で次に
<?php
namespace App\Http\Middleware;
use Closure;
class RedirectIfNotAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = $request->user();
if ($user && $user->is_admin) {
return $next($request);
}
return redirect('/');
}
}
あなたは$routeMiddleware
プロパティに追加します:私は解決
protected $routeMiddleware = [
// ... other middlewares
'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class
];
ありがとうございます。あなたはこれがより良いと思うと言う - なぜ(好奇心が強い)?つまり、「管理者」と呼ばれる新しいガードを作成しないといけないのです。 – GluePear
@GluePearはい、ガードもこれを解決する可能性があります。しかし、 'admin'ガードを使用している場合は、同じ' session'ドライバを使用すると仮定すると、 'admins'テーブルとモデル全体を作成する必要があります。私は、1つのテーブルにユーザーを置くことは良い習慣だと思うので、アプリケーションが大きくなるにつれてアクセス許可/ロールを追加するだけです。だからガードを使用することは解決策です。しかし、この場合、私はそれがむしろ大胆でエレガントだと言うでしょう。 –
@GluePearまあ、私はまた時にはいくつかのユーザーテーブルを持っていることもOKですが追加します。たとえば、管理者だけが利用できるバックオフィスサイトを言うとします。しかし、それはまだ1つのテーブル内で行うことができると思っています。 –
あなたが言及しただけのように、あなたはコアファイルには触れてはいけません。しかし、もしlaravelがAuthenticatesUsers
をLoginControllerにtrait
と追加したことが分かりましたら、をに上書きするだけで、次のようにLoginControllerにcredentials()
を追加することができます。
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return [
'email' => $request->input('email'),
'password' => $request->input('password'),
'is_admin' => 1
];
}
興味深い。私はそれが私の答え( 'LoginController'の' attemptLogin'をオーバーライドする)よりも好ましいかどうか疑問です。 – GluePear
このソリューションは、エレガントではないが、まだ機能している可能性があります。
がLoginController
にこれを追加します。
protected function authenticated(Request $request, $user)
{
if (! $user->is_admin) {
Auth::logout();
return redirect('login')->withErrors(['is_admin' => 'Only admin users may log in']);
}
}
を次にauth/login.blade.php
でこれを置く:ユーザー登録後、まだログインするため
@if($errors->has('is_admin'))
<div class="alert alert-danger" role="alert">{{ $errors->first('is_admin') }}</div>
@endif
はまた、あなたが登録機能を無効にする必要がありますことを、心に留めておきます。
- 1. Laravael認証でログイン確認前にセッションを追加
- 2. Cartalyst/Sentinel Laravel 5.4 - ログインする前にデータベースフィールドを確認する
- 3. Laravelの認証前
- 4. Laravel 5ログイン認証問題
- 5. laravel php pbkdf2ログイン認証
- 6. Laravel - 認証のためのデータベースの電子メールフィールドの認証を確認する
- 7. 認証:確認後にログインできないようにする
- 8. Laravel:再ロードせずに認証を確認する
- 9. phpunit laravelのログイン認証テストケースの手順
- 10. laravelサブドメインの認証ユーザーを確認する方法は?
- 11. Laravel 5.5基本認証ログイン例外
- 12. SQLログインの確認 - ユーザータイプの確認
- 13. ローカライゼーションを認証(ログイン/ログアウト)に設定する方法Laravel?
- 14. laravelの認証
- 15. wicket認証/ログイン
- 16. NT認証ログイン
- 17. djangoログイン認証
- 18. Facebookログイン認証
- 19. ログイン認証Asp.net
- 20. asp.netのログイン確認
- 21. Seleniumログインの確認
- 22. Ionic2のログイン認証
- 23. JavaScriptのクッキーとWebページにアクセスする前のログインの確認
- 24. Laravel 5.4認証されていないとログインにリダイレクトする
- 25. 認証の確認 - パースクラウド
- 26. Laravel RADIUS認証
- 27. Laravelブロードキャスト認証
- 28. Laravel認証ミドルウェアフラッシュメッセージ
- 29. Laravel Firebase認証
- 30. Laravel:認証
AuthenitacesUsersを実装する独自のクラスの関数をオーバーライドします。 – devk
これはおそらくミドルウェアを作ることができますか? –