laravel 从控制器调用路由

Posted

技术标签:

【中文标题】laravel 从控制器调用路由【英文标题】:laravel calling route from a controller 【发布时间】:2017-02-10 14:15:52 【问题描述】:

我目前正在 Laravel 中编写 API,并使用护照。我的客户将使用它自己的 API,因此我在 Passport 中使用个人访问权限。

我不想在 POST 请求中显示我的 oauth 路由和授权 id 或机密,所以我创建了一个路由,让用户发布也可以登录,然后处理向 oauth/token 发送 POST 请求路线,如下图,

protected function authenticate(Request $request) 
        //return $request->input();
        //return Response::json($this->client);
        $email = $request->input('username');
            $password = $request->input('password');
            $request->request->add([
                'username' => $email,
                'password' => $password,
                'grant_type' => 'password',
                'client_id' => $this->client->id,
                'client_secret' => $this->client->secret,
                'scope' => '*'
            ]);

            $tokenRequest = Request::create(
                env('APP_URL').'/oauth/token',
                'post'
            );

            return Route::dispatch($tokenRequest)->getContent();

        

我的问题是无论 oauth 登录是否成功,我的身份验证都会返回 200。有没有办法从控制器触发路由并返回该 http 代码,而不是从 http 响应调用它的方法?

【问题讨论】:

如果您的前端直接在同一应用程序中使用 API 并使用 javascript,您可以简单地使用内置的 CSRF 令牌。你见过这个吗? laravel.com/docs/5.3/… Access Controller method from another controller in Laravel 5的可能重复 【参考方案1】:

这应该可以解决问题。

$data = [
        'grant_type'=> 'password',
        'client_id'=> 99,
        'client_secret'=> 'hgfhfhjnhnjnjnjnj',
        'username'=> $request->username,
        'password'=> $request->password,
        'scopes'=> '[*]'
    ];
$request = Request::create('/oauth/token', 'POST', $data);
return app()->handle($request);

【讨论】:

欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。见:How do I write a good answer?。谢谢 它有帮助。

以上是关于laravel 从控制器调用路由的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ReactJS 组件调用 Laravel Api 路由?

Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?

Laravel 5 路由直接调用控制器

Laravel:在路由与控制器上调用视图

来自控制器的 Laravel 调用路由

从一个控制器 LARAVEL 使用 AJAX 调用不同的函数