gpt4 book ai didi

php - ZFCUser 登录后重定向到自定义 URL

转载 作者:行者123 更新时间:2023-12-01 18:04:52 26 4
gpt4 key购买 nike

我正在尝试为 ZFCUser 模块实现一个函数,该函数将检测当前 URL,将其传递到登录页面,并在用户登录后将其重定向到该 URL。

有人尝试过这样做吗?

我需要向人们提供网站某些区域的链接,但强制他们登录才能看到它们。

谢谢苹果电脑

最佳答案

因此,因为 ZfcUser (1.2) 只允许重定向到普通路由(无参数,无 URI),所以我编写了自己的 RedirectCallback 来覆盖,如下所示:

<?php

namespace Application\Controller;

use Zend\Mvc\Application;
use Zend\Mvc\Router\RouteInterface;
use Zend\Mvc\Router\Exception;
use Zend\Http\PhpEnvironment\Response;
use ZfcUser\Options\ModuleOptions;
use Zend\Mvc\Router\RouteMatch;
use Zend\Http\Request;

/**
* Can redirect to the URI given during login.
* N.B. Don't extend ZfcUser version since its members are all private.
*/
class RedirectUriCallback {

/**
* @var RouteInterface
*/
protected $router;

/**
* @var Application
*/
protected $application;

/**
* @var ModuleOptions
*/
protected $options;

/**
* @param Application $application
* @param RouteInterface $router
* @param ModuleOptions $options
*/
public function __construct(
Application $application, RouteInterface $router, ModuleOptions $options
) {
$this->router = $router;
$this->application = $application;
$this->options = $options;
}

/**
* @return Response
*/
public function __invoke() {
$routeMatch = $this->application->getMvcEvent()->getRouteMatch();
$redirect = $this->getRedirect($routeMatch->getMatchedRouteName(),
$this->getRedirectRouteFromRequest());

$response = $this->application->getResponse();
$response->getHeaders()->addHeaderLine('Location', $redirect);
$response->setStatusCode(302);
return $response;
}

protected function getRedirectRouteFromRequest() {
$request = $this->application->getRequest();
$redirect = $request->getQuery('redirect')? : $request->getPost('redirect');
return $this->getSafeRedirect($redirect);
}

/**
* Sanitize URI: through router and back.
* @param $uri
* @return mixed
*/
private function getSafeRedirect($uri) {
if (!$uri) {
return false;
}
try {
$request = new Request;
$request->setUri($uri);
$routeMatch = $this->router->match($request);
if ($routeMatch instanceof RouteMatch) {
return $this->router->assemble(
$routeMatch->getParams(),
['name' => $routeMatch->getMatchedRouteName()]
);
}
} catch (Exception\RuntimeException $e) {

}
return null;
}

/**
* Returns the url to redirect to based on current route.
* If $redirect is set and the option to use redirect is set to true, it will return the $redirect url.
*
* @param string $currentRoute
* @param mixed $redirect
* @return mixed
*/
protected function getRedirect($currentRoute, $redirect = null) {
$redirect = $this->getSafeRedirect($redirect);
if (!$this->options->getUseRedirectParameterIfPresent()) {
$redirect = false;
}
if ($redirect) {
return $redirect;
}

$route = 'zfcuser';
switch ($currentRoute) {
case 'zfcuser/register':
case 'zfcuser/login':
$route = $this->options->getLoginRedirectRoute();
break;
case 'zfcuser/logout':
$route = $this->options->getLogoutRedirectRoute();
break;
}
return $this->router->assemble([], ['name' => $route]);
}

}

然后通过重写'zfcuser_redirect_callback'工厂返回上述类,如下所示:

        'zfcuser_redirect_callback' => function ($sm) {
$router = $sm->get('Router');
$application = $sm->get('Application');
$options = $sm->get('zfcuser_module_options');
return new RedirectUriCallback($application, $router,
$options);
},

(祝你好运,但不能保证。)

关于php - ZFCUser 登录后重定向到自定义 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com