Php 如何在《拉维4》中使用哨兵2

Php 如何在《拉维4》中使用哨兵2,php,laravel,laravel-4,cartalyst-sentry,Php,Laravel,Laravel 4,Cartalyst Sentry,我的laravel4应用程序中有一个Personcontroller和一个Festival Controller。这些控制器中的操作只能由管理员访问 如果我的数据库只有一个test@hotmail.com,该用户可以访问这两个控制器的路由。如果我的数据库中没有用户test@hotmail.com,但它有其他用户,这些其他用户无法访问这两个控制器的路由。当我的数据库中有一个用户test@hotmail.com,并且有其他用户,每个人都可以访问这两个控制器的路由 我只想与电子邮件的用户test@ho

我的laravel4应用程序中有一个Personcontroller和一个Festival Controller。这些控制器中的操作只能由管理员访问

如果我的数据库只有一个test@hotmail.com,该用户可以访问这两个控制器的路由。如果我的数据库中没有用户test@hotmail.com,但它有其他用户,这些其他用户无法访问这两个控制器的路由。当我的数据库中有一个用户test@hotmail.com,并且有其他用户,每个人都可以访问这两个控制器的路由

我只想与电子邮件的用户test@hotmail.com访问这些控制器的路由

我通过以下操作安装了Sentry2:

在composer.json文件中,需要:

"cartalyst/sentry": "2.0.*"

在app>config>app.php中:

“CartAnalyst\Sentry\SentryServiceProvider”,=>到providers数组

“Sentry”=>“Cartalyst\Sentry\Facades\Laravel\Sentry”,=>到别名数组

安装后,我制作了SentrySeeder文件:

<?php

class SentrySeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();
        DB::table('groups')->delete();
        DB::table('users_groups')->delete();

        Sentry::getUserProvider()->create(array(
            'email'       => 'test@hotmail.com',
            'password'    => "test",
            'activated'   => 1,
        ));

        $user  = Sentry::getUserProvider()->findByLogin('test@hotmail.com');
        $adminGroup = Sentry::getGroupProvider()->findByName('Test');
        $user->addGroup($adminGroup);
    }
}
LoginController中的登录操作

class PersonController extends BaseController {

    public function index()
    {
        try
        {
            $user = Sentry::findUserByLogin('test@hotmail.com');

            if ($user)
            {
                $person = Person::with('user')->orderBy('person_id')->paginate(10);

                return View::make('persons.index')
                   ->with('person', $person);
            }
        }
        catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
        {
            echo 'User was not found.';
        }

    }
}
public function login()
{
    $input = Input::all();
    $rules = array(
        'user_email'    => 'required', 
        'user_password' => 'required'
    );

    $validator = Validator::make($input, $rules);

    if ($validator->fails()) {
        return Redirect::to('login')
            ->withErrors($validator) // send back all errors to the login form
            ->withInput(Input::except('user_password'));
    } 
    else {
        $attempt = Auth::attempt([
            'user_email'    => $input['user_email'],
            'password'  => $input['user_password']
        ]);

        if ($attempt) {
            return Redirect::to('/home');
         } 
        else {
            return Redirect::to('login');
        }

    }
在数据库中存储用户

public function store()
    {
        $input = Input::all();

        $rules = array(
            'user_email'      => 'required|unique:users|email',
            'user_username'      => 'required|unique:users',
        );
        $validator = Validator::make($input, $rules);

        if($validator->passes())
        {
            $password = $input['user_password'];
            $password = Hash::make($password);

            $location = new Location();

            $person = new Person();

            $user = new User();

            $person->person_firstname = $input['person_firstname'];
            $person->person_surname = $input['person_surname'];

            $user->user_username = $input['user_username'];
            $user->user_email = $input['user_email'];
            $user->user_password = $password;

            $location->save();

            $person->save();
            $user->location()->associate($location);
            $user->person()->associate($person);

            $user->save();

            Session::flash('message', 'Successfully created user!');
            return Redirect::to('login');
        }
        else {
            return Redirect::to('persons/create')->withInput()->withErrors($validator);
        }
    }

看起来您需要使用自己的用户表,还需要使用Sentry。因此,您需要将相关的岗哨栏添加到您的栏中。这很简单:

1转到供应商\cartalyst\sentry\src\migrations

2为您在此处看到的每个文件创建一个新迁移,例如:

php artisan migrate:make add_sentry_groups_table
3仅复制上下代码!到您的新迁移

4并且,对于用户迁移,您必须进行一些更改:

而不是Schema::创建“用户”。。。您可以使用Schema::table'users'…,向表中添加更多列

删除当前用户表中所有列的所有命令,必须删除的行示例:

$table->increments('id'); 
$table->timestamps();
5运行正常的“php artisan迁移”

在那之后,你应该让哨兵的桌子准备好工作

编辑

由于您没有使用通常的“电子邮件”和“密码”列,请发布Sentry的配置:

php artisan config:publish cartalyst/sentry
改变

'login_attribute' => 'user_email',

看起来您需要使用自己的用户表,还需要使用Sentry。因此,您需要将相关的岗哨栏添加到您的栏中。这很简单:

1转到供应商\cartalyst\sentry\src\migrations

2为您在此处看到的每个文件创建一个新迁移,例如:

php artisan migrate:make add_sentry_groups_table
3仅复制上下代码!到您的新迁移

4并且,对于用户迁移,您必须进行一些更改:

而不是Schema::创建“用户”。。。您可以使用Schema::table'users'…,向表中添加更多列

删除当前用户表中所有列的所有命令,必须删除的行示例:

$table->increments('id'); 
$table->timestamps();
5运行正常的“php artisan迁移”

在那之后,你应该让哨兵的桌子准备好工作

编辑

由于您没有使用通常的“电子邮件”和“密码”列,请发布Sentry的配置:

php artisan config:publish cartalyst/sentry
改变

'login_attribute' => 'user_email',


在播种机代码中,用户test@hotmail.com没有创建。它怎么能找到那个特定的用户呢?我把一个现有的哨兵改成了test@hotmail.com电子邮件和密码测试,但这也不起作用。我正在学习使用哨兵2。我有我现有的数据库,在安装Sentry2后,我并没有在数据库中更改任何内容,我需要添加一个表或什么吗?您是否检查过您的数据库以查看是否有任何帐户test@hotmail.com是否存在?两条消息都是“找不到用户”。您得到的是哪一条?我有我现有的数据库。你知道sentry为用户使用它自己的数据库表,不是吗?在你的播种机代码中,用户test@hotmail.com没有创建。它怎么能找到那个特定的用户呢?我把一个现有的哨兵改成了test@hotmail.com电子邮件和密码测试,但这也不起作用。我正在学习使用哨兵2。我有我现有的数据库,在安装Sentry2后,我并没有在数据库中更改任何内容,我需要添加一个表或什么吗?您是否检查过您的数据库以查看是否有任何帐户test@hotmail.com是否存在?两条消息都是“找不到用户”。您得到的是哪一条?我有我现有的数据库。你知道sentry为用户使用自己的数据库表,不是吗?这些新创建的迁移必须在应用程序>数据库>迁移中,对吗?我可以使用与vendor\cartalyst\sentry\src\migrations文件夹中相同的名称吗?是的,但是如果使用php artisan migrate:make,它们将已经放置在那里。迁移完成后,我还更新了我的SentrySeeder和PersonController。我想我还是错过了一些东西。我仍然找不到用户。您能在表中看到这些用户吗?是的,我看到了test@hotmail.com在我的桌子上。。在用户电子邮件字段中,用户密码字段是散列的。这些新创建的迁移必须在应用程序>数据库>迁移中,对吗?我可以使用与vendor\cartalyst\sentry\src\migrations文件夹中相同的名称吗?是的,但是如果使用php artisan migrate:make,它们将已经放置在那里。迁移完成后,我还更新了我的SentrySeeder和Pe
遥控器。我想我还是错过了一些东西。我仍然找不到用户。您能在表中看到这些用户吗?是的,我看到了test@hotmail.com在我的桌子上。。在user\u email字段中,user\u password字段是散列的。