使用 laravel 注册新用户作为 API

Posted

技术标签:

【中文标题】使用 laravel 注册新用户作为 API【英文标题】:Register new user with laravel as an API 【发布时间】:2016-01-20 20:25:33 【问题描述】:

我正在构建一个依赖于单独的 Laravel API 的 Angular 应用程序,并且正在尝试注册一个新用户。

开箱即用,Laravel 5.1 Authentication 提供了许多方便的方法来注册用户,但它们适合在整个应用程序中使用 Laravel,即 blade template 前端。

我将此添加到我的 routes.php 文件中:

$router->controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController'
]);

路由/auth/register是为我提供的,所以我尝试创建一个新用户:

来自 DHC:

很抱歉,Chrome API 不允许获取响应正文 重定向。

来自我的应用程序:

XMLHttpRequest 无法加载 http://dde.localhost/auth/register。这 请求被重定向到'http://dde.localhost/home',即 不允许用于需要预检的跨域请求。

我发现这是因为/auth/register方法调用:postRegister() in RegistersUsers.php

App\Http\Controllers\Auth\AuthController@postRegister

看起来像:

public function postRegister(Request $request)

    $validator = $this->validator($request->all());

    if ($validator->fails()) 
        $this->throwValidationException(
            $request, $validator
        );
    

    Auth::login($this->create($request->all()));

    return redirect($this->redirectPath());

这有一个重定向,我猜它通常会重定向到刀片欢迎模板或其他东西。

如果我注释掉重定向,并简单地返回一个200 response

 return Response::make('user created', 200);

我收到一个 CORS 错误:

http://dde.localhost/auth/register。请求的资源上不存在“Access-Control-Allow-Origin”标头。

这很奇怪,因为我通过 BarryCORS 中间件路由所有路由:

Route::group(['middleware' => 'cors'], function(\Illuminate\Routing\Router $router)  

上面写着* 来源是允许的。

所以问题是:如何为仅将 Laravel 用于 API 的前端应用设置注册和身份验证


对于来自我的前端应用程序的每次调用,似乎都会对register 进行两次调用:

First:似乎第一个请求具有访问控制标头,并且它是一个 OPTIONS http 请求:

Request URL:http://dde.localhost/auth/register
Request Method:OPTIONS
Status Code:200 OK
//Response Headers: 
access-control-allow-headers:ACCEPT, CONTENT-TYPE
access-control-allow-methods:GET, POST, PUT, DELETE
access-control-allow-origin:http://localhost:1337
Allow:GET,HEAD,POST,PUT,PATCH,DELETE

第二次:在第二次中,POST 最终被调用,并且带有有效载荷,但访问控制标头被剥离

Request URL:http://dde.localhost/auth/register
Request Method:POST
Status Code:500 Internal Server Error

//Response Headers: there are no access-control-allow methods attached
//Payload
username: "testname", password: "some random password"

这是为什么?

【问题讨论】:

你检查过响应是否真的有这些头吗? 最好使用基于令牌的身份验证。 @fos.alex 见上文编辑 plz 【参考方案1】:

CORS 调用前的 OPTIONS 请求是标准的,就是检查服务器的响应头。

如果您收到 HTTP 500,那是因为服务器出了问题。如果仅针对 CORS,您将得到 40 倍的错误。 检查你的 laravel 应用日志,服务器端有问题。

【讨论】:

以上是关于使用 laravel 注册新用户作为 API的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 护照从 api 路由注册新用户

Laravel 新用户注册通过 API POST 失败

Laravel 5.8 新用户注册时无法生成 api_token

如何在 Laravel 中禁用注册新用户

Laravel8 实现注册新用户时邮箱验证

Laravel8 实现注册新用户时邮箱验证