Nano Hash - криптовалюты, майнинг, программирование

Как аутентифицировать электронную почту и пароль с помощью laravel 5.3 вручную?

Привет всем Мой вопрос: как мы можем аутентифицировать нашу электронную почту и пароль в laravel 5.3? Я не использую Auth здесь, я пытаюсь создать систему входа вручную
Это метод регистрации пользователя
public function post_register(Request $request){ $this->validate($request , [ 'username' => 'required|' , 'email' => 'required|email|unique:registers' , 'password' => 'required|min:6', 'cp' => 'required|same:password']); $data = new Register; $data->username = $request->username; $data->email = $request->email; $data->password = bcrypt($request->password); $data->save(); return Redirect::back()->with('success' , 'user registred'); }

Это метод входа

public function post_login(Request $request){
    $this->validate($request , [
        'email' => 'required|email' ,
        'password' => 'required']);

 $data = Register::where('email' , $request->email)->exists();
 if($data){
     Session::put('email' , $request->email);
     return Redirect::to('profile');

 }
 else{
    return Redirect::to('login');

 }

этот код работает, но проблема в том, что если я ввожу зарегистрированный адрес электронной почты и незарегистрированный пароль, он перенаправляется на страницу профиля. я не могу аутентифицировать пользователя с помощью электронной почты и пароля, потому что я использую хэш-функцию bcrypt() в пароле, и когда я пытаюсь сопоставить http-запрос с сохраненным паролем, он показывает ошибку. Пожалуйста, помогите мне, спасибо


  • Вы можете зашифровать пароль при входе в систему, а затем проверить его правильно? Если я вас правильно понял, единственное, что идет не так, это проверка пароля. 06.12.2016
  • так что мне теперь делать? как я могу проверить почту и пароль? 06.12.2016
  • Вы можете либо переписать свой запрос, чтобы проверить как адрес электронной почты, так и пароль, или заставить пользователя и вручную проверить его пароль в базе данных и совпадение запроса. if (data) --> if (bcrypt(request->password) === $data->password в псевдокоде 06.12.2016
  • Я пробовал, сэр, но bcrypt() изменил свое значение, когда я использовал его по запросу->пароль, и я вводил правильный пароль 06.12.2016
  • Это в значительной степени дело, верно? См. ответ @pari для рабочего решения. 06.12.2016
  • Нет, сэр, это не работает 06.12.2016
  • @DeepGaganGuru Взгляните на мой новый ответ и попробуйте реализовать его. 06.12.2016

Ответы:


1

Это не сработает, потому что вы сравниваете строковые результаты хеша, что неверно.

Изменяет функцию регистрации

$data->password = Hash::make($request->password);

Изменить функцию входа

public function post_login(Request $request){
    $this->validate($request , [
        'email' => 'required|email' ,
        'password' => 'required']);

    $data = Register::where('email' , $request->email)->first();
    if($data){ 
        if(Hash::check($request->password, $data->password)){
            Session::put('email' , $request->email);
            return Redirect::to('profile');
        }
    }
    return Redirect::to('login');
}

Пояснение

Эти изменения позволяют вам использовать встроенную в Laravel функцию хэширования для генерации хэшей при регистрации и расчета, действителен ли хэш во время входа в систему.

06.12.2016
  • ErrorException в строке userController.php 55: Попытка получить свойство не-объекта. Эта ошибка отображается на странице 06.12.2016
  • Я только что понял проблему. Попробуйте изменить exists() на first() 06.12.2016
  • Я попробовал, сэр, на этот раз он не показывает никаких ошибок и перенаправляет обратно на вход в систему. 06.12.2016
  • Готово, сэр, теперь все работает, вы только что допустили небольшую ошибку в коде. -›password, $data-›password)){ ..Большое спасибо, сэр 06.12.2016
  • Рад, что помог :). Пожалуйста, примите мой ответ, если он сработал для вас 06.12.2016

  • 2

    Измените свой код на этот.

    $data = Register::where('email' , $request->email)
                    ->where('password' ,bcrypt($request->password))
                    ->exists();
    
    06.12.2016
  • Вы не можете сравнить результат bcrypt() со строками из-за жесткой соли, которая используется каждый раз при запуске bcrypt(). В результате каждый раз получается разностная строка. Их нужно вычислить 06.12.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..