You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel中使用SSOfy认证SDK时,如何实现未认证重定向至登录页?

在Laravel服务类中实现未认证用户重定向至SSOfy登录页的方案

直接结论:别用Laravel自带的登录重定向路由,因为你已经切换到SSOfy的认证体系,必须直接对接SSOfy的登录入口,才能走通完整的SSO认证流程。

具体实现步骤:

  • 利用SSOfy SDK生成登录跳转URL
    假设你已经完成SSOfy SDK的配置,在服务类里直接调用SDK的方法生成合法的登录链接,示例代码如下:

    use SSOfy\Laravel\Facades\SSOfy;
    
    class YourServiceClass
    {
        // 业务方法中调用认证检查
        public function processBusinessLogic()
        {
            if (!$this->isUserAuthenticated()) {
                // 生成带回调地址的SSOfy登录链接,登录成功后返回当前页面
                $loginUrl = SSOfy::login()->redirectUrl([
                    'redirect_uri' => url()->current()
                ]);
    
                return redirect()->to($loginUrl);
            }
    
            // 用户已认证,执行后续业务逻辑
            // ...
        }
    
        // 你的认证检查函数
        private function isUserAuthenticated()
        {
            // 直接用SSOfy SDK的会话检查方法,替代Laravel原生的Auth检查
            return SSOfy::session()->check();
        }
    }
    
  • 为什么不能用Laravel默认路由?
    Laravel默认的login路由是绑定自身的Auth系统的,和SSOfy的认证流程完全不兼容。如果强行用这个路由,用户会被跳转到Laravel自带的登录页面,而非SSOfy的统一登录入口,直接破坏SSO的逻辑。

  • 可选优化:全局拦截用中间件
    如果多个业务场景都需要做未认证重定向,不如把逻辑抽成自定义中间件,复用性更强:

    namespace App\Http\Middleware;
    
    use Closure;
    use SSOfy\Laravel\Facades\SSOfy;
    
    class SSOfyAuthenticate
    {
        public function handle($request, Closure $next)
        {
            if (!SSOfy::session()->check()) {
                $loginUrl = SSOfy::login()->redirectUrl([
                    'redirect_uri' => $request->fullUrl()
                ]);
                return redirect()->to($loginUrl);
            }
    
            return $next($request);
        }
    }
    

    注册中间件后,给需要保护的路由或控制器分组绑定即可。

内容的提问来源于stack exchange,提问作者Darren Wakeling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:27:06