Sentry on Laravel 4. Социальная аутентификация без пароля

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

Sentry::authenticate($credentials, false);  

Приведенная выше команда всегда должна запрашивать пароль. Как войти в систему пользователя без необходимости запрашивать пароль?

1 ответ

Решение

В Sentry вы можете войти в систему двумя разными способами:

1) Когда вы вводите пароль в форму входа, вы указываете Sentry найти пользователя и проверять пароль для аутентификации и входа в него / нее одновременно:

// Set login credentials
$credentials = array(
    'email'    => Input::get('email'),
    'password' => Input::get('password'),
);

// Try to authenticate the user
$user = Sentry::authenticate($credentials, false);

2) Когда пользователь проходит проверку подлинности с помощью других средств, таких как OAuth, и вам просто нужно заставить его войти в систему:

// Find the user using the user id or e-mail
$user = Sentry::findUserById($userId);

// or 

$user = Sentry::findUserByLogin($email);

// and

// Log the user in
Sentry::login($user, false);

Вы выбираете тот или иной, вам не нужно использовать оба.

3) В качестве третьего примера предположим, что у вас есть старая пользовательская база данных, и ваши пароли хешируются с использованием MD5:

// Find the user

$user = Sentry::findUserByLogin($email);

// Check the password

if ($user->password !== md5(Input::get('password'))
{
    Redirect::back()->withMessage('Password is not correct.');
}

// And, if password is correct, force the login:

Sentry::login($user, false);
Другие вопросы по тегам