4

私は、Laravel 5.3 で役割ベースのアクセス許可を管理するためにentrustを使用しており、当然のことながら、さまざまなユーザー タイプに対して手動/カスタム ログインを使用しています。Auth::attempt()外部テーブルの関係を処理することは可能ですか? 基本的に、私はこのようなことをしたい:

if(Auth::attempt(['email' => $request->email, 'password' => $request->password, hasRole('teacher') => true])) {
        return redirect()->intended('teacher/dashboard');
}

hasRole()しかし、未定義の関数であるというエラーが発生し続けます。use Zizaco\Entrust\Traits\EntrustUserTrait;とを含めましuse EntrustUserTrait;た。これにより、関数へのアクセスが提供されると思いましたが、明らかにそうではありません。

これがユーザー オブジェクトのメソッドであることに感謝しhasRole()ます。チェックの時点ではユーザー オブジェクトはありませんが、ユーザーが既にログインしているため、試行が成功した後にロール チェックを実行できません。役割が間違っていた場合、資格情報は正しいのでログアウトする必要がありますが、役割ではありません。これは遅く、実用的ではないようです。

これをどのように処理すればよいですか?Auth::attemptユーザーにログインせずに、指定された入力でユーザーが存在することを確認し、ロールチェックを実行してから、別の機能を使用して認証セッションを開始する代替手段はありますか?

役立つ場合、私の LoginController は次のとおりです。

<?php

namespace App\Http\Controllers\Teacher;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use Validator;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class LoginController extends Controller {
    use EntrustUserTrait;

    public function showLoginForm() {
        return view('teacher/login');
    }

    public function authenticate(Request $request) {
        Validator::make($request->all(), [
            'email' => 'required|email',
            'password' => 'required',
        ])->validate();

        if(Auth::attempt(['email' => $request->email, 'password' => $request->password, hasRole('teacher') => true])) {
            return redirect()->intended('teacher/dashboard');
        }

        return redirect('admin/login')->with('invalid', 'Invalid username or password');
    }
}

どんな助けや指示も大歓迎です。ありがとう。

4

3 に答える 3

1

あなたができることは次のとおりです。

 if(Auth::attempt(['email' => $request->email, 'password' => $request->password)) {
     if($user = Auth::user()->hasRole('teacher')) {
         return redirect()->intended('teacher/dashboard');
     } else {
         return redirect()->intended('teacher/dashboard');
     }
 }
于 2016-11-06T04:20:32.727 に答える