Laravel 5.5 Auth method method только возвращает false - PullRequest
0 голосов
/ 30 августа 2018

Это может быть повторяющийся вопрос о том, почему auth: попытка всегда возвращает false, но, несмотря на поиск ответов, я не могу решить свою проблему дальше.

У меня есть таблица учеников с идентификатором std_id, электронной почтой std_email и паролем std_password. Чтобы преодолеть поле пароля по умолчанию, я прошел через некоторые ответы и рекомендую использовать эту функцию для переопределения имени поля

public function getAuthPassword() {
        return $this->std_password;
    }

и функция попытки

public function authenticate(Request $request)
    {
        if (Auth::attempt(['std_email' => $request['std_email'], 'password' => $request['std_password']])){
            return response()->json([
                'validated' => true
            ]);
        }else{
            return response()->json([
                'validated' => false
            ]);
        }
    }

Итак, я обновил два файла, auth / LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use \Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function authenticate(Request $request)
    {
        if (Auth::attempt(['std_email' => $request['std_email'], 'password' => $request['std_password']])){
            return response()->json([
                'validated' => true
            ]);
        }else{
            return response()->json([
                'validated' => false
            ]);
        }
    }

}

и модель User как

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $primaryKey = "std_id";
    protected $table = "students";

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'std_email', 'std_password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        //'std_password', 'remember_token',
    ];

    public function getAuthPassword() {
        return $this->std_password;
    }

}

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

Кроме того, когда я регистрирую студента, я использую bcrypt для хеширования пароля и сохранения его в БД.

public function create(Request $request){

        $account_exists = $this->check_account_exists($request['email']);

        if($account_exists){

            return response()->json(['account'=>true]);

        }else{

            DB::table('students')->insert([
                'std_fname'     => $request['first_name'],
                'std_lname'     => $request['last_name'],
                'std_email'     => $request['email'],
                'std_password'  => bcrypt($request['std_password']),
                'group_id'      => $request['group'],
                'std_isActive'  => 1
            ]);

            return response()->json(['created'=>true]);

        }

    }

На данный момент я не получаю никаких ответов, почему метод попытки не работает, поскольку я убедился, что информация для входа верна? Вы видите, пропустил ли я что-нибудь еще?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Hash :: make ($ request ['std_password']) для шифрования пароля, также поделитесь своим кодом с auth.php

0 голосов
/ 01 сентября 2018

Я пробовал разные методы, и ни один из них не работал. Однако я обнаружил очень интересное открытие. Может быть, я не знал об этом раньше или нет. При сохранении пароля я установил первый пароль (метод auth :: пытающийся всегда возвращать false), включающий как минимум 1 верхний регистр и 1 специальный символ, а PW был «Abcde12!». Это не удавалось каждый раз. Затем я добавил простой пароль без этих правил и сохранил в БД как «секретный». Когда я проверил логин, он вернул true. Итак, теперь реальный вопрос: почему хеширование пароля со специальным символом не сработало?

0 голосов
/ 30 августа 2018

Похоже, что вы проходите в

    'password' => $request['std_password']

до

    Auth::attempt()

метод, когда ваша таблица БД не содержит столбца «пароль». Вы, вероятно, хотите перейти в

    'std_password' => $request['std_password']

но даже тогда я не уверен, что

    Auth::attempt()

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

    Auth::attempt()

или создайте новый метод попытки, который будет хэшировать ввод перед сравнением ... или вы можете использовать

    bcrypt()

для хеширования вашего ввода 'std_password', прежде чем передать его на попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...