4

ログインのための Sentry 2 の実装を理解できません。つまり、セントリーではかなり前に進まなかったということです。入力からメソッドにユーザー名/電子メールとパスワードを提供しますSentry::login()が、現在は変更されており、本当に混乱しています。

まず第一に、意味のない Username 列を削除しました。
2 番目に、login メソッドは、ユーザー ID を使用して取得する必要がある User オブジェクトを受け取るようになりましたが、別のクエリを作成しない限りユーザー ID がわからないため、すべてが非常に複雑になります。

私のコード:

public function login()
{
    // Deny access to already logged-in user
    if(!Sentry::check())
    {
        $rules = array(
            'username' => 'required|unique:users',
            'password' => 'required' );

        $validator = Validator::make(Input::all(), $rules);

        if($validator->fails())
        {
            Session::flash('error', $validator->errors());
            return Redirect::to('/');
        }

        $fetch = User::where('username', '=', trim(Input::get('username')));
        $user = Sentry::getUserProvider()->findById($fetch->id);

        if(!Sentry::login($user, false))
        {
            Session::flash('error', 'Wrong Username or Password !');
        }

        return Redirect::to('/');

    }

    return Redirect::to('/');
}

私はこのアプローチを使用しようとしましたが、例外がスローされます.idがテーブルの一部であり、ユーザーモデルが $table = 'users'; を使用したクラス宣言に過ぎないにもかかわらず、そのidは不明です。属性。

ここで何が間違っているのか、理解していないのですか。

4

3 に答える 3

2

Sentry 2 Auth ルートに関する私の意見を共有したいと思います。これは、私が現在すべてのプロジェクトで使用しているものです。「Alert」クラスは、最近見つけたこのパッケージからのものです。以前は MessageBag に渡していましたが、これがいかにきれいかが気に入っています。

class AuthController extends BaseController {

    public function login()
    {
        try
        {
            // Set login credentials
            $credentials = array(
                'email'    => Input::get('email') ?: null,
                'password' => Input::get('password') ?: null
            );

            // Authenticate our user and log them in
            $user = Sentry::authenticate($credentials, Input::get('remember_me') ?: false);

            // Tell them what a great job they did logging in.
            Alert::success(trans('success/authorize.login.successful'))->flash();

            // Send them where they wanted to go
            return Redirect::intended('/');

        }
        catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
        {
            Alert::error(trans('errors/authorize.login.required'))->flash();
        }
        catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
        {
            Alert::error(trans('errors/authorize.login.password.required'))->flash();
        }
        catch (Cartalyst\Sentry\Users\WrongPasswordException $e)
        {
            Alert::error(trans('errors/authorize.login.password.wrong'))->flash();
        }
        catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
        {
            Alert::error(trans('errors/authorize.login.user.found'))->flash();
        }
        catch (Cartalyst\Sentry\Users\UserNotActivatedException $e)
        {
            Alert::error(trans('errors/authorize.login.user.activated'))->flash();
        }
        // The following is only required if throttle is enabled
        catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e)
        {
            Alert::error(trans('errors/authorize.login.user.suspended'))->flash();
        }
        catch (Cartalyst\Sentry\Throttling\UserBannedException $e)
        {
            Alert::error(trans('errors/authorize.login.user.banned'))->flash();
        }

        return Redirect::back()->withInput(Input::except('password'));
    }

    public function logout()
    {
        Sentry::logout();

        Alert::success(trans('success/authorize.logout.successful'))->flash();

        return Redirect::to('/');
    }
}
于 2013-10-20T23:59:27.123 に答える