User Authentication in Lumen

懵懂的女人 提交于 2020-01-24 14:11:26

问题


I'm trying to enable basic user authentication username, and password into my Lumen application.

In app.php file, the following has been uncommented as explained in https://lumen.laravel.com/docs/5.4/authentication

 $app->withFacades();
 $app->routeMiddleware([
    'auth' => App\Http\Middleware\Authenticate::class,
 ]);
  $app->register(App\Providers\AuthServiceProvider::class);

My Route looks like this:

 $app->post('auth/register', ['uses' => 'Auth\AuthController@postRegister']);

My Controller looks like this:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
use Auth;
use App\User;
 class AuthController extends Controller {

/**
 * Create a new authentication controller instance.
 *
 * @return void
 */
public function __construct()
{

}

public function postRegister(Request $request, UserRepository $userRepository)
{
    $this->validate($request, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
    ]);

    $user = $userRepository->store($request);

    Auth::login($user);

    return ['result' => 'success'];
}
}

I have been getting a combination of weird and wonderful errors, currently I'm getting:

ReflectionException in BoundMethod.php line 155:
Class App\Repositories\UserRepository does not exist

I've done some extensive google searching, but there doesn't seem to be many documented uses of user auth in Lumen so looking for a pointer as to what I've missed here.


回答1:


My initial error: I was looking for a method of logging in a user, what I should have been looking for was authentication. Thinking about what I actually needed to achieve I came up with the below functions:

  1. Create user
  2. Delete user
  3. Verify user

With that in mind I ended up with something like the below:

<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//Required to hash the password
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller {
    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {

    }

    public function validateRequest(Request $request) {
      $rules = [
          'email' => 'required|email|unique:users',
          'password' => 'required|min:6'
      ];
      $this->validate($request, $rules);
    }


    //Get the input and create a user
    public function store(Request $request) {
        $this->validateRequest($request);
        $user = User::create([
            'email' => $request->get('email'),
            'password'=> Hash::make($request->get('password'))
        ]);
        return response()->json(['status' => "success", "user_id" => $user->id], 201);
    }


   //delete the user
   public function destroy($id) {
          $user = User::find($id);
          if(!$user){
              return response()->json(['message' => "The user with {$id} doesn't exist"], 404);
          }
          $user->delete();
          return response()->json(['data' => "The user with with id {$id} has been deleted"], 200);
        }


    //Authenticate the user
    public function verify(Request $request) {
      $email = $request->get('email');
      $password = $request->get('password');
      $user = User::where('email', $email)->first();
      if($user && Hash::check($password, $user->password)) {
        return response()->json($user, 200);
      }
      return response()->json(['message' => "User details incorrect"], 404);
    }


    //Return the user
    public function show($id) {
      $user = User::find($id);
      if(!$user) {
        return response()->json(['status' => "invalid", "message" => "The userid {$id} does not exist"], 404);
      }
        return response()->json(['status' => "success", 'data' => $user], 200);
    }

    //Update the password
    public function update(Request $request, $id) {
      $user = User::find($id);
      if(!$user){
          return response()->json(['message' => "The user with {$id} doesn't exist"], 404);
      }
      $this->validateRequest($request);
      $user->email        = $request->get('email');
      $user->password     = Hash::make($request->get('password'));
      $user->save();
      return response()->json(['data' => "The user with with id {$user->id} has been updated"], 200);
    }

}



回答2:


I'm not really sure what you want to achieve with UserRepository and Auth. Lumen is a stateless framework, meaning that Auth::login() never will have any effect. Also, as far as I'm concerned, UserRepository is a Laravel thing. Not a Lumen thing.

Create the user with App\User::create($request->all()) and access it through the Eloquent model. You can enable Eloquent in bootstrap/app.php



来源:https://stackoverflow.com/questions/43426340/user-authentication-in-lumen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!