не работает сброс пароля для пользовательской (клиентской) таблицы - Laravel (работает с API) - PullRequest
0 голосов
/ 09 июня 2018

У меня проблемы с настройкой средства сброса пароля для пользовательской таблицы пользователей (предположим, таблица customers).Удалось сгенерировать токен для сброса пароля, но не удалось выполнить сброс из-за того, что Laravel рассматривал его таблицу по умолчанию «users», а не таблицу, которую я предполагаю сделать сброс.Изменение таблицы по умолчанию users на customers в Config\Auth.php создает ошибку проверки

Пароли должны содержать не менее шести символов и соответствовать подтверждению.

Я просто копирую/ Вставить то, что я сделал до сих пор

<?php
/*
Code Done by Arun
*/
namespace App\Http\Controllers\API\ResetPassword;

use App\Http\Controllers\API\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Support\Facades\Password;
use App\Model\Customer;
use Laravel\Passport\Client;
use Illuminate\Support\Facades\Auth;


class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    public function __construct()
    {
        $this->middleware('api');
    }
    protected function guard()
    {
        return Auth::guard('api');
    }
    public function ResetPassword(Request $request)
    {
        $v = validator($request->only('email', 'token', 'password','confirm_password'), [
            'token' => 'required|string|max:255',
            'email' => 'required|string|email|max:255',
            'password' => 'required|string',
            'confirm_password' => 'required|string|min:6',
            ]);
        if ($v->fails()) {
            return response()->json(["error"=>$v->errors()->all()], 400);
        }
        else
        {
            $response = $this->broker()->reset(
                $this->credentials($request), function ($user, $password) {
                    $this->resetPassword($user, $password);
                });
        }

        return $response == Password::PASSWORD_RESET
        ? $this->sendResetResponse($response)
        : $this->customResetFailedResponse($request, $response);

        // $client = Client::where('password_client', 1)->first();
        // $request->request->add([
        //  'grant_type'    => 'password',
        //  'client_id'     => $client->id,
        //  'client_secret' => $client->secret,
        //  'username'      => $request->email,
        //  'password'      => $request->password,
        //  'scope'         => null,
        //  ]);

  //       // Fire off the internal request. 
        // $proxy = Request::create(
        //  'oauth/token',
        //  'POST'
        //  );
        // return $response ;
    }

}

Любой эксперт Laravel может помочь мне с проблемой?

1 Ответ

0 голосов
/ 18 июня 2018

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

<?php

namespace App\Http\Controllers\API\Auth;

use App\Http\Controllers\API\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Support\Facades\Password;
use App\Model\Customer;

use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use GuzzleHttp\Client;
use DB;
class ResetPasswordController extends Controller
{
    use ResetsPasswords;
    protected $confirmEmail = false;
    public function __construct()
    {

    }

    public function resetPasswordCustomer(Request $request)
    {
        //Custome password reset mail has done in customer model
        $v = validator($request->only('token', 'password','password_confirmation'), [
            'token' => 'required|string|max:255',
            'password' => 'required|string',
            'password_confirmation' => 'required|string|min:6',
            ]);
        if ($v->fails()) {
            return response()->json(["error"=>$v->errors()->all()], 400);
        }
        else
        {
            $request->merge(['email'=> $this->checkTokenAgainstHashedValue($request->token)]);//Add new property to request.. 
            $response = $this->broker()->reset(
                $this->credentials($request), function ($user, $password) {
                    $this->resetPassword($user, $password);
                });
        }
        return $response == Password::PASSWORD_RESET
        ? $this->authToken($request)
        : $this->customResetFailedResponse($request, $response);

        return $response ;
    }
    protected function checkTokenAgainstHashedValue($token)
    {
        $resetTable = DB::table('password_reset_customers')->select('token','email')->get();
        foreach ($resetTable as $value) {
            if (Hash::check($token, $value->token)) {
                return $value->email;
            }
        }
        return null;
    }
    protected function authToken(Request $request)
    {
        $http = new Client();

        $response = $http->post('http://abcd.com/oauth/token', [
            'form_params' => [
            'grant_type' => 'password',
            'client_id' => 2,
            'client_secret' =>'qazrxGbDwrwbYXwbEbbkUFNO1zGB3eFYQN3AbG3m',
            'username' => Auth::user()->email,
            'password' =>  $request->password,
            'scope' => '',
            ],
            ]);

        return json_decode((string) $response->getBody(), true);

    }
    public function broker()
    {
        return Password::broker('customers');
    }

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