starta/yoga

PHP的Yoga SDK

dev-master 2020-02-12 14:29 UTC

This package is auto-updated.

Last update: 2024-09-13 01:31:30 UTC


README

Yoga的Laravel SDK

此项目仍处于alpha阶段。请不要在生产环境中使用。

安装

在终端打开您的项目并运行

composer require starta/yoga

然后运行此命令以发布资源和配置文件

php artisan vendor:publish --provider="Yoga\YogaServiceProvider"

默认配置看起来像这样

<?php

return [
  'auth' => [
    'enabled' => true,
    'guard' => 'api',
    'users_table' => 'users',
    'api_tokens'  => true,
    'controller' => ''
  ],
  'routes' => [
    'global' => [
      'prefix' => 'yoga',
      'middleware' => ['api'],
    ],
    'auth' => [
      'middleware' => ['api', 'auth:api']
    ],
    'guest' => [] 
  ],
  'resources' => [
    'me' => Yoga\Resources\Me::class
  ]
];

// End of file

如果您想使用Yoga默认的API验证,应该运行

php artisan migrate

启用认证

为了使您的Yoga客户端进行认证,您必须告诉您的Yoga服务器如何进行。首先,在您的controllers文件夹中创建一个名为AuthController的控制台。然后,您必须向它添加IdentityAndPassword特性,并设置您应用程序的可认证模型。以下示例中,我们将使用Laravel默认认证

App\Http\Controllers\AuthController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AuthController
{
  use \Yoga\Auth\IdentityAndPassword;

  public $authenticable;

  function __construct() {
    $this->authenticable = \App\User::class;
  }
}

// End of file

然后在您的配置文件中,将auth.controller设置为实际的认证控制器。

config/yoga.php

  *****
  'auth' => [
    'enabled' => true,
    'guard' => 'api',
    'users_table' => 'users',
    'api_tokens'  => true,
    'controller' => 'App\Http\Controllers\AuthController',
    'enable_create_user' => true,
    'create_user_rules' => [
      'name' => 'required|min:2',
      'email' => 'required|email',
      'password' => 'required|min:6|max:16'
    ],
    'enable_update_user' => true,
    'update_user_rules' => [
      'name' => 'required|min:2',
      'email' => 'required|email|unique:users,email',
      'password' => 'nullable|min:6|max:16'
    ]
  ],
  *******

这就完成了,您的认证方法应该运行良好。

数据库模块

为了使您的Yoga客户端能够访问您的模型,您应该在配置文件中将它们注册为资源。以下示例中,我们创建了两个模型,App\PostApp\Comment,它们是相关的。在您的配置文件中,注册它们如下

config/yoga.php

  *****
  'resources' => [
    'me' => Yoga\Resources\Me::class,
    'posts' => App\Post::class,
    'comments' => App\Comment::class
  ]
  *******

创建用户

要创建新用户,您需要在配置文件中注册配置,并在IdentityAndPassword文件中添加功能。

src/Auth/IdentityAndPassword.php

*****
function createUser(Request $request)
  {
    if (!config('yoga.auth.enable_create_user')) {
      return Yoga::reject(__('Create users not enable'));
    }

    // Validar requisição

    $validatedData = $request->validate(
      config('yoga.auth.create_user_rules', [])
    );

    $validatedData['password'] = Hash::make($validatedData['password']);

    // Criar novo usuario

    $user = $this->authenticable::create($validatedData);

    // Logar o novo usuario

    $user->createToken();

    return Yoga::resolve([
      'access_token' => $user->getAccessToken(),
      'token_type' => 'Bearer',
      'expires_at' => date('Y-m-d H:i:s', strtotime('+1 day'))
    ]);

  }
*******

更新用户

要创建新用户,您需要在配置文件中注册配置,并在IdentityAndPassword文件中添加功能。

src/Auth/IdentityAndPassword.php

*****
function updateProfile(Request $request) {

    // Verica se possui permissão para editar
    if (!config('yoga.auth.enable_update_user')) {
      return Yoga::reject(__('Update users not enable'));
    }
    $user = Auth::guard(config('yoga.auth.guard'))->user();

    // Valida os dados
    $validatedData = $request->validate(
      collect(config('yoga.auth.update_user_rules', []))->map(function($rule) use ($user) {
        return join(collect(explode('|', $rule))->map(function($rule) use ($user) {
          if (strpos($rule, 'unique:') !== false) {
            return $rule.','.$user->id;
          } else return $rule;
        })->toArray(), '|');
      })->toArray()
    );
    if ($validatedData['password']) {
      $validatedData['password'] = Hash::make($validatedData['password']);
    }

    // Edita os dados
    $user->update($validatedData);

    return Yoga::resolve($user);
  }
*******

这就完成了。您的Yoga客户端现在可以使用Yoga客户端访问您的模型。

CORS问题

如果您的Yoga服务器在不同的域上运行,而您的Yoga客户端在另一个域上,您可能有一些CORS问题。为了解决这个问题,我们建议使用spatie/cors库