【发布时间】:2014-09-29 02:15:52
【问题描述】:
我正在学习如何使用 Cartalyst/Sentinel。
我已经
1) 安装 Laravel 并导入包。运行迁移并生成必要的表。 2) 我已经创建了用户注册表单和控制器
- 创建记录
- 创建激活码
- 向用户发送一封包含激活链接的电子邮件。
如果用户通过点击链接激活,他们就可以登录。
如果他们不激活他们就不能(这就是我想要的)。
我的问题是我有以下方法尝试捕获是否存在 NotActivatedException。我想将用户重定向到提醒用户此帐户未激活的主页。但我收到 Laravel 错误消息,而不是显示错误的视图。这是我的代码。
公共函数 postSignin() {
try {
// Validation
$validation = Validator::make(Input::all(), [
'email' => 'required|email',
'password' => 'required'
]);
if ($validation->fails()) {
return Redirect::route('signin')->withErrors($validation)->withInput();
}
$remember = (Input::get('remember') == 1) ? true : false;
if ($user = Sentinel::authenticate(Input::all(), $remember)) {
return Redirect::route('home')->with('global', 'Howdy ' . $user->username . '!');
}
$errors = 'Invalid Email / Password';
return Redirect::route('signin')->with('global', $errors);
} catch (NotActivatedException $e) {
$errors = 'Account not activated.';
return Redirect::route('signin')->with('global', $errors);
}
return Redirect::route('home')->with('global', 'There was a problem signing you in.');
}
我不确定为什么 catch 不起作用,因为我想显示带有“帐户未激活”错误的登录页面。相反,我得到了像这样的 Laravel 调试页面。
【问题讨论】:
-
尝试在控制器文件的顶部添加
use Cartalyst\Sentinel\Checkpoints\NotActivatedException;。 -
谢谢 :) 我必须为我的所有控制器都这样做吗?