我正在尝试在我的应用程序中正确设置sentry软件包。
我可以登录一个用户进出和保护路由,但我似乎不能得到重定向::打算
正常工作。我的理解是,用户在被引导到登录页面之前,会被带回到他们最初调用的路由。目前,它只是继续重定向到默认页面。
在我的路线上。php我已设置以下组:
Route::group(array('before' => 'sentryAuth'), function () {...}
在这个组中,我已经放置了所有受保护的路由。
在我的过滤器里。php我有以下过滤器:
Route::filter('sentryAuth', function () {
if (!Sentry::check()) {
return Redirect::route('login');
}
});
路由::过滤器('sentryGuest',函数(){
if (Sentry::check()) {
return Redirect::intended('dashboard');
}
});
在我的userController中,我有以下代码:
public function postAuthenticate()
{
try {
// Set login credentials
$credentials = array(
'email' => Input::get('email'),
'password' => Input::get('password')
);
// Try to authenticate the user
$user = Sentry::authenticate($credentials, false);
} catch (Cartalyst\Sentry\Users\LoginRequiredException $e) {
echo 'Login field is required.';
}
catch (Cartalyst\Sentry\Users\PasswordRequiredException $e) {
echo 'Password field is required.';
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
echo 'User was not found.';
}
catch (Cartalyst\Sentry\Users\WrongPasswordException $e) {
echo 'Wrong password, try again.';
}
catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) {
echo 'User is not activated.';
}
if (!Sentry::check()) {
return Redirect::to('user/login');
} else {
return Redirect::intended('dashboard');
}
}
我尝试在未登录的情况下访问“预订/创建”页面。我被带到登录页面,登录,但它会带我到仪表板,而不是预订/创建。
我是不是遗漏了什么?是否有额外的代码,我需要得到预期的工作??
@灵隐的回答非常好。这里有一个稍微不同的版本。
路线。php
// NOTE: do NOT name your filter "auth" as it will not override
// Laravel's built-in auth filter and will not get executed
Route::filter( 'sentryAuth', function()
{
// check if logged in or not
if ( ! Sentry::check() )
{
// the guest() method saves the intended URL in Session
return Redirect::guest( 'user/login' );
} else {
// now check permissions for the given route
$user = Sentry::getUser();
if ( ! $user->hasAccess( Route::currentRouteName() ) )
{
// redirect to 403 page
return Response::make( 'Forbidden', 403 );
}
}
});
// Protected routes
Route::group( array( 'before' => 'sentryAuth', function()
{
Route::get( 'admin', function() { return View::make( 'admin.index' ); } );
});
在您的登录功能中:
public function login() {
try {
$creds = array(
'email' => Input::get( 'email' ),
'password' => Input::get( 'password' )
);
$user = Sentry::authenticate( $creds );
return Redirect::intended( 'dashboard' );
} catch ( Exception $e ) {
// handle exceptions
}
}
我不确定这一点,因为我没有在我目前的项目中使用哨兵。
似乎由于您在laravel 4中使用了SentryAuth而不是本机Auth类,因此没有设置预期url的会话项。我看了重定向类上的API,我看到了这个:
public function intended($default, $status = 302, $headers = array(), $secure = null)
{
$path = $this->session->get('url.intended', $default);
$this->session->forget('url.intended');
return $this->to($path, $status, $headers, $secure);
}
正如代码所说,会话密钥是“url”。“有意的”。我使用本机身份验证过滤器验证了这一点,并按照预期在Session::get('URL.designed')
上设置了预期的URL。。
所以一个可能的解决方案是在会话中手动设置它。一个例子是:
在你的过滤器上
Route::filter('sentryAuth', function () {
if (!Sentry::check()) {
Session::put('loginRedirect', Request::url());
return Redirect::route('login');
}
});
在postAuthenticate()方法上
if (!Sentry::check()) {
return Redirect::to('user/login');
} else {
// Get the page we were before
$redirect = Session::get('loginRedirect', 'dashboard');
// Unset the page we were before from the session
Session::forget('loginRedirect');
return Redirect::to($redirect);
}
部分代码取自此处以供参考^_^
在你的过滤器里。php请确保使用:
return Redirect::guest('login');
而不是
return Redirect::route('login');
guest函数将为expected()设置正确的会话变量以使其正常工作。
我的Redis Sentinel故障转移不起作用,当master完成时,不进行握手,故障转移也不发生;然而,sentinel会显示主程序何时恢复到正常状态或何时关闭。我的sentinel.conf文件内容如下: 我真的很感激你能帮上忙。
我正在与一个远程合作伙伴开发一个Laravel项目。 我没有安装mcrypt,所以每次需要使用composer时,我都会通过别名引用php: 这是一个很好的修复,直到我的远程朋友安装了哨兵软件包,这是我无法做到的。 使用另一个stackoverflow线程,我能够使用mcrpyt引用正确版本的php,更新composer并安装sentry。 我的问题是: Sentry在我搭档的本地主机上工作,我将
我正试图使用两个redis节点设置哨兵。请找到内联的conf文件。 端口16371 dir“C:\程序文件\redis\16371\” loglevel通知 日志文件“C:\Program Files\redis\logs\16371.log” 哨兵监视器示例127.0.0.1 6371 *致命配置文件错误*读取配置文件,在第5行 有人能帮我把这个修好吗。蒂亚:)
主要内容:一、哨兵,二、源码分析,三、总结一、哨兵 Sentinel(哨兵),听名字大家都应该想得到这个家伙是做什么的。在redis的应用中,有单机模式、主从模式、哨兵模式和集群模式,其实你从它的发展就可以看出来,redis是从一个简单的应用开始,不断的壮大,从单点到分布式,从简单的主从备份以及初始的哨兵监控,再到可以看成把二者合成的集群模式,除了是应用场景的变化,更多的是为了提高安全性和高可用性。网上有很多人问哨兵和集群有啥不一样,其实
每一个哨兵都可以连接到我的主人,并可以看到奴隶。它们能够独立地检测主从是否倒下。问题是哨兵们无法探测到对方。 我已经验证了每个哨兵都像预期的那样向通道发布消息,但似乎没有一个哨兵真正从其他哨兵通道接收消息。 我怎么让哨兵们见面?
Redis 哨兵(Sentinel)是 Redis 的高可用性(Hight Availability)解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。 Sentinel