Laravel - не могу войти с отобранными пользователями - PullRequest
0 голосов
/ 14 октября 2019

Я делаю SPA с Laravel, и у меня есть сеялка для моих пользователей. Сеялка, похоже, хорошо заправляет мою базу данных. Для каждого пользователя пароль тот же 12345678, который я установил с помощью Hash: make. Но когда я пытаюсь войти в систему, он не работает, пока пользователи четко находятся в базе данных (не могу проверить пароль, поскольку он хешируется). Поэтому я попытался зарегистрировать некоторых пользователей, и странно то, что зарегистрированные пользователи могут войти в систему просто отлично. У меня сорвано с ума, я смотрю на это уже несколько дней, так что пришло время обратиться за помощью.

Я проверил полезную нагрузку для запроса, и он точно соответствует входным данным. Я почти уверен, что это как-то связано с сеялкой, но я не могу понять это. Кроме того, раньше он отлично работал с посеянными данными, но я больше не принадлежу старым сеялкам.

База данных сеялок

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // Seed the users
        $this->call(UserSeeder::class);

        //seed the campaigns
        $this->call(CampaignSeeder::class);

        //seed the campaign users
        $this->call(UserCampaignSeeder::class);
    }
}

ПользовательСеялка

use App\User;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $user = new User();
        $user->name = "Test1";
        $user->email = "test1@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test2";
        $user->email = "test2@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test3";
        $user->email = "test3@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test4";
        $user->email = "test4@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test5";
        $user->email = "test5@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test6";
        $user->email = "test6@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test7";
        $user->email = "test7@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();

        $user = new User();
        $user->name = "Test8";
        $user->email = "test8@gmail.com";
        $user->password = Hash::make("12345678");
        $user->save();
    }
}

Auth Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
use App\User;

    class AuthController extends Controller
    {
        /**
         * Create a new AuthController instance.
         *
         * @return void
         */
        public function __construct()
        {
            $this->middleware('auth:api', ['except' => ['login', 'register']]);
        }

        public function register(Request $request)
        {
            $user = User::create([
                'name'    => $request->username,
                'email'    => $request->email,
                'password' => $request->password,
            ]);

            $token = auth('api')->login($user);

            return $this->respondWithToken($token);
        }

        /**
         * Get a JWT via given credentials.
         *
         * @return \Illuminate\Http\JsonResponse
         */
        public function login()
        {
            $credentials = request(['email', 'password']);

            if (!$token = auth('api')->attempt($credentials)) {
                return response()->json(['error' => 'Unauthorized'], 401);
            }

            return $this->respondWithToken($token);
        }

        /**
         * Get the authenticated User.
         *
         * @return \Illuminate\Http\JsonResponse
         */
        public function me()
        {
            return response()->json(auth('api')->user());
        }

        /**
         * Log the user out (Invalidate the token).
         *
         * @return \Illuminate\Http\JsonResponse
         */
        public function logout()
        {
            auth('api')->logout();

            return response()->json(['message' => 'Successfully logged out']);
        }

        /**
         * Refresh a token.
         *
         * @return \Illuminate\Http\JsonResponse
         */
        public function refresh()
        {
            return $this->respondWithToken(auth('api')->refresh());
        }

        /**
         * Get the token array structure.
         *
         * @param  string $token
         *
         * @return \Illuminate\Http\JsonResponse
         */
        protected function respondWithToken($token)
        {
            return response()->json([
                'access_token' => $token,
                'user' => $this->guard()->user(),
                'token_type' => 'bearer',
                'expires_in' => auth('api')->factory()->getTTL() * 60
            ]);
        }

        public function guard()
        {
            return Auth::Guard('api');
        }
    }

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Мне кажется, проблема в том, что вы неправильно импортируете Hash в свою сеялку. Однако вы можете просто использовать bcrypt() вместо Hash. Пожалуйста, попробуйте:

$user->password = bcrypt("12345678");

и посмотрите, работает ли он, пожалуйста.

А также убедитесь, что в вашей модели User нет функции мутатора, которая автоматически хеширует пароль, например @ceejayoz блестяще указал в комментариях - если это так, просто начните работу пользователей, используя простые текстовые пароли.

0 голосов
/ 14 октября 2019

В вашей функции входа в систему вместо оператора сравнения == или === вы использовали присвоение =, попробуйте

        public function login()
        {
            $credentials = request(['email', 'password']);

            // just use the returned boolean value
            if (!auth('api')->attempt($credentials)) {
                return response()->json(['error' => 'Unauthorized'], 401);
            }

            return $this->respondWithToken($token);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...