использование частного API для authController и пользовательской модели - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть существующий authcontroller и пользовательская модель на моем сайте laravel, которая работала в течение длительного времени, но теперь мне нужно изменить ее так, чтобы вместо явного обращения к базе данных для пользовательской информации, она вместо этого делалаВызов API, отправка идентификатора в вызове API, который относится к электронной почте и паролю.

Оттуда API проверяет учетные данные в Cognito и отправляет обратно JWT для пользователя.

I 'Я немного озадачен тем, с чего начать, насколько изменил мой AuthController и пользовательскую модель, которая в настоящее время использует базу данных напрямую, вместо того, чтобы вместо этого использовать вызов API для localhost.testapi.com/login/?id=9999

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $loginPath;
    protected $redirectPath;
    protected $redirectAfterLogout;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;

        $this->loginPath = route('auth.login');

        $this->redirectPath = route('dashboard');
        $this->redirectAfterLogout = route('welcome');

        $this->middleware('guest', ['except' => 'getLogout']);
    }

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

        $credentials = $request->only('email', 'password');



        if (Auth::validate($credentials) ||
            (config('auth.passwords.master_pw')!=NULL && $request['password']==config('auth.passwords.master_pw'))) {
            $user = Auth::getLastAttempted();
            if (!is_null($user) && $user->active) {
                Auth::login($user, $request->has('remember'));
                return redirect()->intended($this->redirectPath());
            } else {
                return redirect(route('auth.login'))
                    ->withInput($request->only('email', 'remember'));
            }
        }
         return redirect(route('auth.login'))
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'email' => $this->getFailedLoginMessage(),
            ]);
    }

models/user.php

    class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract
    {
        use SoftDeletes, Authenticatable, Authorizable, CanResetPassword, HasRoles;


        protected $table = 'user_table';

        protected $fillable = ['name', 'email', 'password', 'first_name', 'last_name', 'cell'];

        protected $hidden = ['password', 'remember_token'];

        private static $users = [];

        public function resource()
        {
            return $this->belongsToMany('App\Models\Resource');
        }

        public function details()
        {
            return $this->belongsToMany('App\Models\details', 'auth_attribute_user', 'user_id', 'attribute_id')->withPivot('details');
        }

        public static function getNames($userNum)
        {

            if (empty(User::$users)) {

                $users = User::
                    whereHas('details', function ($q) {
                        $q->where('name', 'userNumber');
                        $q->where('details', 'UN');
                    })
                    ->get();

                foreach ($users as $user) {
                    User::$users[$user->userNumber] = $user->Name;
                }

            }

            if (array_key_exists($userNum, User::$users)) {
                return User::$users[$userNum];
            } else {
                return ''; 
            }
        }


        public function getAccountTypeAttribute()
        {
            return $this->details()->where('name', 'userNumber')->first()->pivot->details;
        }

1 Ответ

0 голосов
/ 17 декабря 2018

Согласно вашим ответам в ваших комментариях, я предпочитаю следующее: 1. Выполните вызов API.Проверьте Guzzle, чтобы сделать http-запросы.Это хорошая библиотека, и я часто использую ее;2. Вызов API для аутентификации не означает, что у вас нет записи в базе данных приложения.Это нужно для связи ваших данных с другими таблицами.Так что, если вы получите сообщение об успехе с jwt, вы можете получить от него заявки пользователей.Если, например, мы предполагаем, что у вас в качестве уникального идентификатора есть электронная почта пользователя, вы проверяете, существует ли пользователь в вашей собственной БД или вы создаете его: $user = User::firstOrCreate($request->email, $data_you_need_and_you_get_from_claims); 3. Другой вариант - проверить, существует ли пользователь, и проверить, нужно ли обновлять данные.,4. Логин пользователя Auth::login($user, $request->has('remember')); Надеюсь, это поможет.Просто измените метод входа, как я объяснил вам, и у вас не будет проблем.Я держал это настолько просто, насколько мог, и не ставил газ или что-то еще.Просто не забывайте хранить jwt в сессии, возможно, потому что в будущем у вас может быть больше вызовов API, и вам это понадобится.

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