我有我的Laravel應用程序的帳戶電子郵件確認,然後我想檢查用戶嘗試登錄時,如果用戶已激活他的帳戶。自定義中間件檢查模型自定義函數返回值的錯誤自定義函數Laravel 5.1
我有一個自定義模式功能isActivated只返回用戶模式的狀態attibute(布爾型,西班牙文命名的國家體制)。
在我的用戶模型:
public function isActivated()
{
return $this->estado;
}
我創建爲提供建議上面的鏈接類似我的中間件,然後我在app/HTTP/Kernel.php註冊爲中間件路線
問題來了當我將中間件分配給我的路由(而不是在我的控制器中創建構造函數時,我只需要在登錄控制器的發佈請求中使用此中間件)。
當我試圖登錄拋出一個錯誤:
Fatal Throwable Error:
Fatal Error: Call to a member function isActivated() on null
我中間件看起來需要付出爲紐帶
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class RedirectIfNotMailActivated
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $this->auth->user()->isActivated()) {
return redirect('/login')
->with('mensaje',
'¡Lo sentimos, no ha confirmado su cuenta aún!');
} else {
return $next($request);
}
}
}
有趣的部分:如果我添加的處理函數的內容我在App/Http/Middleware/Authenticate(auth中間件)中的中間件,然後我將一些路由分組並附加到這個中間件,這按預期工作(不允許未確認的用戶登錄)
問題是,我在用戶表中爲用戶類型(管理員和客戶)設置了多態關係,因此我將管理控制面板連接並分組爲auth中間件,因爲我需要將控制面板的訪問權限僅用於已認證的用戶和管理員類型(不允許客戶用戶類型)。
僅限管理員用戶類型的限制。
而coursethis讓客戶用戶類型可以登錄,因爲如果他的帳戶被確認或沒有,那麼我沒有任何活動。
我在做什麼錯誤...當在auth中間件中添加isActivated模型函數時可以正常工作,但在我的自定義中間件中使用這種方法時沒有問題。
感謝....
EDITED
我中間件asigned我的帖子方法爲我登錄控制器
Route::post('/login', [
'middleware' => 'activated.email',
'uses' => '[email protected]'
]);
PD:對不起長的帖子和英語不好habilities,它是不是我的第一語言:(
你可以粘貼你如何分配這個中間件到你的路線? – TheFallen
當然,我編輯了我的帖子,添加了路線定義:) @TheFallen – elotgamu