精华内容
下载资源
问答
  • laravel5修改操作
    2022-02-08 15:33:17

    一、首先根据文档生成批量操作类

    先运行下面的命令生成批量操作类:

    php artisan admin:action Post\\BatchReplicate --grid-batch --name="批量复制"

     二、在控制器中添加如下代码

    $grid->batchActions(function ($batch) {
        $batch->add(new BatchReplicate());
    });

    三、在批量操作类里

    <?php
    
    namespace App\Admin\Actions\Post;
    
    use Encore\Admin\Actions\BatchAction;
    use Illuminate\Http\Request;
    use Illuminate\Support\Collection;
    
    class TextBatchEditor extends BatchAction
    {
        public $name = '翻译批量编辑';
    
        //注意这里边的参数,应该也可以使用Model $model, Request $request,可以自己打印一下看看
        public function handle( Collection $collection, Request $request)
        {
            $fanYi = $request->get('fanyi_platform');
            $fanYiDoc = $request->get('fanyidoc_platform');
            $fanYiImg = $request->get('fanyiimg_platform');
            $trans = $request->get('trans_plat');
            
            //因为是批量操作,会有多条数据,注意循环处理
            foreach($collection as $model) {
                $model->update([
                    'fanyi_platform' => $fanYi ? $fanYi : $model->fanyi_platform,
                    'fanyidoc_platform' => $fanYiDoc ? $fanYiDoc : $model->fanyidoc_platform,
                    'fanyiimg_platform' => $fanYiImg ? $fanYiImg : $model->fanyiimg_platform,
                    'trans_plat' => $trans ? $trans : $model->trans_plat
                    ]);
            }
    
            //会自动刷新页面
            return $this->response()->success('批量修改成功')->refresh();
        }
    
        //form方法相当于生成了一个表单,点击按钮会自动跳出
        public function form()
        {
            $this->select('fanyi_platform', "文本翻译")->options(config("platform"));
            $this->select('fanyidoc_platform', "文档翻译")->options(config("fanyi_platform.doc"));
            $this->select('fanyiimg_platform', "图片翻译")->options(config("fanyi_platform.img"));
            $this->select('trans_plat', "语音转写")->options(config("fanyi_platform.trans"));
        }
    
    }

     四、进阶提升-大佬完善的代码

      (用到了php反射机制 php reflection)

    public function handle( Collection $collection, Request $request)
        {
            $options = $request->only(['fanyi_platform', 'fanyidoc_platform', 'fanyiimg_platform', 'trans_plat']);
    
            // 过滤为空的
            $options = array_filter($options);
    
            $ids = $collection->pluck('id')->toArray();
            $model = $collection->first();
    
            if ($options) {
                //通过模型找到类,用类修改数据库数据
                get_class($model)::query()->whereIn('id', $ids)->update($options);
            }
    
            return $this->response()->success('批量修改成功')->refresh();
        }

    更多相关内容
  • 主要介绍了Laravel 手动开关 Eloquent 修改器的操作方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了laravel框架数据库操作、查询构建器、Eloquent ORM操作,结合实例形式分析了laravel数据库连接、增删改查、排序及Eloquent ORM数据库操作等相关使用技巧,需要的朋友可以参考下
  • 主要介绍了Laravel框架Eloquent ORM修改数据操作,结合实例形式详细分析了laravel框架更新数据的两种常见操作技巧,需要的朋友可以参考下
  • 今天小编就为大家分享一篇Laravel-admin之修改操作日志的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了Laravel框架实现修改登录和注册接口数据返回格式的方法,结合实例形式分析了Laravel框架针对登录与注册接口数据操作流程、原理与修改操作实现方法,需要的朋友可以参考下
  • 场景:两张表,1会员卡主表,2,会员卡商品表,修改会员卡主表如果商品新增或者修改了,需要更新或者新增数据: 使用: 会员卡主表模型多对多关联副表 主表model: //数据表名称 protected $table = 'saas_member_...

    场景:两张表,1会员卡主表,2,会员卡商品表,修改会员卡主表如果商品新增或者修改了,需要更新或者新增数据:
    使用:
    会员卡主表模型多对多关联副表

    主表model:

        //数据表名称
        protected $table = 'saas_member_card';
    
    
        /**
         * 指示是否自动维护时间戳
         *
         * @var bool
         */
        public $timestamps = false;
    
        /**
         *  多对多 批量修改新增数据使用
         * @return BelongsToMany
         */
        public function cardProduct():BelongsToMany
        {
            return $this->belongsToMany(SaasMemberCardProduct::class,'saas_member_card_product','card_id','product_id');
        }
    

    业务逻辑:

    	// 根据id查询主表
    	$card_first = SaasMemberCard::selectById($postData['id'])->first();
    	// 组装副表的数据 $free_product_id = [1,3,4,5]
     	$product_data = [];
     	foreach ($free_product_id as $value){
            $product_data[$value] = [
                    'vip_type'=>1,
                    'custom_id'=>$this->custom_id,
                    'create_time'=> time(),
                    'product_id'=>$value
                ];
            }
          // 调用model的多对多使用sync更新或者修改数据
          $card_first->cardProduct()->sync($product_data);
    
    展开全文
  • 主要介绍了Laravel框架数据库迁移操作实例详解,需要的朋友可以参考下
  • laravel修改用户信息

    2021-08-25 14:05:29
    // 修改用户显示 Route::get('user/edit/{id}', 'UserController@edit') -> name('admin.user.edit'); // 修改用户处理 Route::put('user/edit/{id}', 'UserController@update') -> name('admin.user....

    1.1、定义路由

            // 修改用户显示
            Route::get('user/edit/{id}', 'UserController@edit') -> name('admin.user.edit');
    
            // 修改用户处理
            Route::put('user/edit/{id}', 'UserController@update') -> name('admin.user.edit');
    

    1.2、控制器

    // 修改用户显示
        public function edit (int $id) {
            $model = User::find($id);
            return view('admin.user.edit', compact('model'));
        }
        
        // 修改用户处理
        public function update (Request $request, int $id) {
            $model = User::find($id);
            
            // 原密码
            $spass = $request -> get('spassword');
    
            // 原密码密文
            $oldpass = $model -> password;
    
            $bool = Hash::check($spass, $oldpass);
    
            // dump($bool);
            if ($bool) {
                // 修改
                $data = $request -> only([
                    'username',
                    'password',
                    'phone',
                    'sex',
                    'email'
                ]);
                if (!empty($data['password'])) {
                    $data['password'] = bcrypt($data['password']);
                }
                else {
                    unset($data['password']);
                }
    
                $model -> update($data);
                return redirect(route('admin.user.index')) -> with('success','修改用户成功');
            }
            else {
                return redirect(route('admin.user.edit', $model)) -> withErrors(['error' => '原密码不正确']);
            }
    
        }

    1.3、修改模版

    views/admin/user/index.blade.php

    @if($item -> deleted_at == null)
    	<span class="label label-primary radius">
    		<a href="{{route('admin.user.edit', $item)}}">修改</a>
    	</span>
    @endif
    

    views/admin/user新增edit.blade.php模版。代码在如下关键代码给出。

    二、本节关键代码

    UserController.php

    <?php
    // 后台用户管理
    namespace App\Http\Controllers\Admin;
    
    use Illuminate\Http\Request;
    use Faker\Provider\Base;
    use App\Models\User;
    use Mail;
    use Illuminate\Mail\Message;
    
    // 验证铭文密码与加密的密码是否一致
    use Hash;
    
    class UserController extends BaseController
    {
        
        // 用户列表
        public function index() {
            // echo $this->pagesize;
            // 分页  withTrashed()显示所有的,包括已经进行了软删除的
            $data = User::orderBy('id', 'desc') -> withTrashed() -> paginate($this->pagesize);
            return view('admin.user.index', compact('data'));
        }
    
        // 用户增加显示
        public function add() {
            return view('admin.user.add');
        }
    
        // 用户添加处理
        public function create(Request $request) {
    
            $this->validate($request, [
                // 唯一性验证 
                'username' => 'required|unique:users,username',
                // 'account' => 'required',
                'phone' => 'phone',
                'email' => 'required',
                'password' => 'required|confirmed',
            ]);
    
            // dump($request -> all());
    
            // 获取表单数据
            $post = $request -> except(['_token', 'password_confirmation']);
    
            $post['password'] = bcrypt($post['password']);
            // 添加用户入库
            $userModel = User::create($post);
            // dump($userModel);
            // 密码
            $pwd = $post['password'];
            // 发邮件给用户  (匿名函数传入外部变量 用use)
            Mail::send('mail.useradd', compact('userModel', 'pwd'), function(Message $message) use ($userModel){
                // 发给谁
                $message ->to($userModel -> email);
    
                // 主题
                $message -> subject('开通账户邮件通知');
            });
    
            // 跳转到列表页
            return redirect(route('admin.user.index')) -> with('success', '添加用户成功');
    
        }
    
        // 删除用户操作
        public function del(int $id) {
            // 软删除
            User::find($id) -> delete();
    
            // 强制删除 在配置了软删除的时候,真实的删除操作
            // User::find($id) -> forceDelete();
    
            return ['status' => 0, 'msg' => '删除成功'];
        }
    
        // 恢复用户
        public function restore(int $id) {
            // 还原
            User::onlyTrashed() -> where('id', $id) -> restore();
            return redirect(route('admin.user.index')) -> with('success', '还原成功');
        } 
    
        // 全选删除用户
        public function delall (Request $request) {
            $ids = $request -> get('id');
            User::destroy($ids);
            return ['status' => 1, 'msg' => '全选删除成功'];
        }
    
        // 修改用户显示
        public function edit (int $id) {
            $model = User::find($id);
            return view('admin.user.edit', compact('model'));
        }
        
        // 修改用户处理
        public function update (Request $request, int $id) {
            $model = User::find($id);
            
            // 原密码
            $spass = $request -> get('spassword');
    
            // 原密码密文
            $oldpass = $model -> password;
    
            $bool = Hash::check($spass, $oldpass);
    
            // dump($bool);
            if ($bool) {
                // 修改
                $data = $request -> only([
                    'username',
                    'password',
                    'phone',
                    'sex',
                    'email'
                ]);
                if (!empty($data['password'])) {
                    $data['password'] = bcrypt($data['password']);
                }
                else {
                    unset($data['password']);
                }
    
                $model -> update($data);
                return redirect(route('admin.user.index')) -> with('success','修改用户成功');
            }
            else {
                return redirect(route('admin.user.edit', $model)) -> withErrors(['error' => '原密码不正确']);
            }
    
        }
    } 
      
    

    edit.blade.php

    <!--_meta 作为公共模版分离出去-->
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <link rel="Bookmark" href="/favicon.ico" >
    <link rel="Shortcut Icon" href="/favicon.ico" />
    
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui/css/H-ui.min.css" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/css/H-ui.admin.css" />
    <link rel="stylesheet" type="text/css" href="/admin/lib/Hui-iconfont/1.0.8/iconfont.css" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/skin/default/skin.css" id="skin" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/css/style.css" />
    
    
    <title>修改用户 - H-ui.admin v3.1</title>
    </head>
    <body>
    <article class="page-container">
    	<!-- 表单验证 -->
    	@include('admin.common.validate')
    	<form action="{{route('admin.user.edit', $model)}}" method="post" class="form form-horizontal" id="form-member-add">
    
    	<!-- 让表单模拟put提交 -->
    	@method('PUT')
    	@csrf
    		<div class="row cl">
    			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>姓名:</label>
    			<div class="formControls col-xs-8 col-sm-9">
    				<!-- 闪存 -->
    				<input type="text" class="input-text" value="{{$model -> username}}" placeholder="姓名" id="username" name="username">
    			</div>
    		</div>
            <!-- <div class="row cl">
    			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>账号:</label>
    			<div class="formControls col-xs-8 col-sm-9">
    				<input type="text" class="input-text" value="{{old('account')}}" placeholder="账号" id="account" name="account">
    			</div>
    		</div> -->
    		<div class="row cl">
    		<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>原密码:</label>
    		<div class="formControls col-xs-8 col-sm-9">
    			<input type="password" class="input-text" autocomplete="off" name="spassword" >
    		</div>
    	</div>
            <div class="row cl">
    		<label class="form-label col-xs-4 col-sm-3">密码:</label>
    		<div class="formControls col-xs-8 col-sm-9">
    			<input type="password" class="input-text" autocomplete="off" value="" placeholder="密码" id="password" name="password">
    		</div>
    	</div>
    	<div class="row cl">
    		<label class="form-label col-xs-4 col-sm-3">确认密码:</label>
    		<div class="formControls col-xs-8 col-sm-9">
    			<input type="password" class="input-text" autocomplete="off"  placeholder="确认新密码" id="password_confirmation" name="password_confirmation">
    		</div>
    	</div>
    		<div class="row cl">
    			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>性别:</label>
    			<div class="formControls col-xs-8 col-sm-9 skin-minimal">
    				<div class="radio-box">
    					<input name="sex" type="radio" id="sex-1" value="0" checked>
    					<label for="sex-1">男</label>
    				</div>
    				<div class="radio-box">
    					<input type="radio" id="sex-2" name="sex" value="1">
    					<label for="sex-2">女</label>
    				</div>
    				<!-- <div class="radio-box">
    					<input type="radio" id="sex-3" name="sex">
    					<label for="sex-3">保密</label>
    				</div> -->
    			</div>
    		</div>
    		<div class="row cl">
    			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>手机:</label>
    			<div class="formControls col-xs-8 col-sm-9">
    				<input type="text" class="input-text" value="{{$model -> phone}}" placeholder="手机号码" id="phone" name="phone">
    			</div>
    		</div>
    		<div class="row cl">
    			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>邮箱:</label>
    			<div class="formControls col-xs-8 col-sm-9">
    				<input type="text" class="input-text" placeholder="@" value="{{$model -> email}}" name="email" id="email">
    			</div>
    		</div>
    		<div class="row cl">
    			<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
    				<input class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;修改用户&nbsp;&nbsp;">
    			</div>
    		</div>
    	</form>
    </article>
    
    <!--_footer 作为公共模版分离出去-->
    <script type="text/javascript" src="/admin/lib/jquery/1.9.1/jquery.min.js"></script> 
    <script type="text/javascript" src="/admin/lib/layer/2.4/layer.js"></script>
    <script type="text/javascript" src="/admin/static/h-ui/js/H-ui.min.js"></script> 
    <script type="text/javascript" src="/admin/static/h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->
    
    <!--请在下方写此页面业务相关的脚本--> 
    <script type="text/javascript" src="/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/jquery.validate.js"></script> 
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/validate-methods.js"></script> 
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/messages_zh.js"></script>
    <script type="text/javascript">
    $(function(){
    	$('.skin-minimal input').iCheck({
    		checkboxClass: 'icheckbox-blue',
    		radioClass: 'iradio-blue',
    		increaseArea: '20%'
    	});
    	
    	$("#form-member-add").validate({
    		rules:{
    			username:{
    				required:true,
    			},
    			spassword: {
    				required: true,
    			},
    			// password: {
    			// 	required: true,
    			// },
    			password_confirmation: {
    				equalTo: '#password'
    			},
    			phone:{
    				required:true,
    				isMobile:true,
    			},
    			email:{
    				required:true,
    				email:true,
    			},
    			
    		},
    	});
    });
    </script> 
    <!--/请在上方写此页面业务相关的脚本-->
    </body>
    </html>

    在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

    展开全文
  • Laravel使这微风,将始终使用正确的连接是否使用原始查询,查询生成器或雄辩的ORM。 如何读/写连接应该配置,让我们看看这个例子: 复制代码 代码如下: ‘mysql’ => array(‘read’ => array(‘host’ => ‘192.168.1.1...
  • Laravel5语言包.zip

    2019-07-19 07:57:38
    Laravel 5 语言包,包含37种语言, 基于 Laravel4-lang.安装composer require "overtrue/laravel-lang:dev-master" 或者添加下面一行到你的项目 composer.json 中 require 部分:"require": { "overtrue/...
  • 更多python、PHP教程请到友情连接: 菜鸟教程https://www.piaodoo.com 茂名一技...修改 Admin 模型 文章参考 做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外

    更多python、PHP教程请到友情连接: 菜鸟教程https://www.piaodoo.com

    茂名一技http://www.enechn.com

    ppt制作教程步骤 http://www.tpyjn.cn

    兴化论坛http://www.yimoge.cn

    电白论坛 http://www.fcdzs.com


    做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能。

    现在假设我们只需要修改登录用户的表,表名和表结构都与框架默认的表users不同,文档没有教我们如何去做,但是别慌,稍微看下框架实现用户认证的源码就能轻松实现。

    首先,自定义一张表用来登录,表结构和模拟数据如下:

    表 admins

    idlogin_namelogin_pass
    1admin2y10$2MUhp7b6ghVOngb/.b/x6uuEW/yL3FqPKJztawrM0U577Clf07xda

    从配置文件入手

    用户认证相关的配置都保存在config/auth.php文件中,先来看看配置文件的内容:

            <?php
    
        return [
        
            /*
            |--------------------------------------------------------------------------
            | Authentication Defaults
            |--------------------------------------------------------------------------
            |
            | This option controls the default authentication "guard" and password
            | reset options for your application. You may change these defaults
            | as required, but they're a perfect start for most applications.
            |
            */
        
            'defaults' =&gt; [
                'guard' =&gt; 'web',
                'passwords' =&gt; 'users',
            ],
        
            /*
        |--------------------------------------------------------------------------
        | Authentication Guards
        |--------------------------------------------------------------------------
        |
        | Next, you may define every authentication guard for your application.
        | Of course, a great default configuration has been defined for you
        | here which uses session storage and the Eloquent user provider.
        |
        | All authentication drivers have a user provider. This defines how the
        | users are actually retrieved out of your database or other storage
        | mechanisms used by this application to persist your user's data.
        |
        | Supported: "session", "token"
        |
        */
    
        'guards' =&gt; [
            'web' =&gt; [
                'driver' =&gt; 'session',
                'provider' =&gt; 'users',
            ],
    
            'api' =&gt; [
                'driver' =&gt; 'passport',
                'provider' =&gt; 'users',
            ],
        ],
    
        /*
        |--------------------------------------------------------------------------
        | User Providers
        |--------------------------------------------------------------------------
        |
        | All authentication drivers have a user provider. This defines how the
        | users are actually retrieved out of your database or other storage
        | mechanisms used by this application to persist your user's data.
        |
        | If you have multiple user tables or models you may configure multiple
        | sources which represent each model / table. These sources may then
        | be assigned to any extra authentication guards you have defined.
        |
        | Supported: "database", "eloquent"
        |
        */
    
        'providers' =&gt; [
            'users' =&gt; [
                'driver' =&gt; 'eloquent',
                'model' =&gt; App\User::class,
            ],
    
            // 'users' =&gt; [
            //     'driver' =&gt; 'database',
            //     'table' =&gt; 'users',
            // ],
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Resetting Passwords
        |--------------------------------------------------------------------------
        |
        | You may specify multiple password reset configurations if you have more
        | than one user table or model in the application and you want to have
        | separate password reset settings based on the specific user types.
        |
        | The expire time is the number of minutes that the reset token should be
        | considered valid. This security feature keeps tokens short-lived so
        | they have less time to be guessed. You may change this as needed.
        |
        */
    
        'passwords' =&gt; [
            'users' =&gt; [
                'provider' =&gt; 'users',
                'table' =&gt; 'password_resets',
                'expire' =&gt; 60,
            ],
        ],
    
    ];
    

    默认使用的守卫是web,而web守卫使用的认证驱动是session,用户提供器是users。假设我们的需求只是将用户的提供器由users改为admins,那么我们需要做两步操作:

    修改默认的用户提供器,将provider=>'users'改为provider=>'admins'

              'guards' => [
                    'web' => [
                        'driver' => 'session',
                        'provider' => 'users',
                    ],
                ],
    

    配置admins提供器,假设依旧使用eloquent作为驱动,并创建好了admins表的模型

        'providers' => [
                'admins' => [
                    'driver' => 'eloquent',
                    'model' => App\Admin::class
                ]
            ],
    

    使用Auth门面的attempt方法进行登录

    SessionGuard 中的attempt方法:

        //Illuminate\Auth\SessionGuard
         public function attempt(array $credentials = [], $remember = false)
            {
                $this->fireAttemptEvent($credentials, $remember);
    
            $this-&gt;lastAttempted = $user = $this-&gt;provider-&gt;retrieveByCredentials($credentials);
    
            // If an implementation of UserInterface was returned, we'll ask the provider
            // to validate the user against the given credentials, and if they are in
            // fact valid we'll log the users into the application and return true.
            if ($this-&gt;hasValidCredentials($user, $credentials)) {
                $this-&gt;login($user, $remember);
    
                return true;
            }
    
            // If the authentication attempt fails we will fire an event so that the user
            // may be notified of any suspicious attempts to access their account from
            // an unrecognized user. A developer may listen to this event as needed.
            $this-&gt;fireFailedEvent($user, $credentials);
    
            return false;
        }
    

    该方法中调用 UserProvider 接口的retrieveByCredentials方法检索用户,根据我们的配置,UserProvider接口的具体实现应该是EloquentUserProvider,因此,我们定位到EloquentUserProvider的retrieveByCredentials方法:

        //Illuminate\Auth\EloquentUserProvider
        public function retrieveByCredentials(array $credentials)
            {
                if (empty($credentials) ||
                   (count($credentials) === 1 &&
                    array_key_exists('password', $credentials))) {
                    return;
                }
    
            // First we will add each credential element to the query as a where clause.
            // Then we can execute the query and, if we found a user, return it in a
            // Eloquent User "model" that will be utilized by the Guard instances.
            $query = $this-&gt;createModel()-&gt;newQuery();
    
            foreach ($credentials as $key =&gt; $value) {
                if (Str::contains($key, 'password')) {
                    continue;
                }
    
                if (is_array($value) || $value instanceof Arrayable) {
                    $query-&gt;whereIn($key, $value);
                } else {
                    $query-&gt;where($key, $value);
                }
            }
    
            return $query-&gt;first();
        }</pre>
    

    该方法会使用传入的参数(不包含password)到我们配置的数据表中搜索数据,查询到符合条件的数据之后返回对应的用户信息,然后attempt方法会进行密码校验,校验密码的方法为:

        //Illuminate\Auth\SessionGuard
        /**
             * Determine if the user matches the credentials.
             *
             * @param  mixed  $user
             * @param  array  $credentials
             * @return bool
             */
            protected function hasValidCredentials($user, $credentials)
            {
                return ! is_null($user) && $this->provider->validateCredentials($user, $credentials);
            }
    

    进一步查看EloquentUserProvider中的validateCredentials方法

        //Illuminate\Auth\EloquentUserProvider
        public function validateCredentials(UserContract $user, array $credentials)
        {
            $plain = $credentials['password'];
    
        return $this-&gt;hasher-&gt;check($plain, $user-&gt;getAuthPassword());
    }
    

    通过validateCredentials可以看出,提交的认证数据中密码字段名必须是password,这个无法自定义。同时可以看到,入参$user必须实现Illuminate\Contracts\Auth\Authenticatable接口(UserContract是别名)。

    修改 Admin 模型

    Admin模型必须实现Illuminate\Contracts\Auth\Authenticatable接口,可以借鉴一下User模型,让Admin直接继承Illuminate\Foundation\Auth\User 就可以,然后重写getAuthPassword方法,正确获取密码字段:

        // App\Admin
        public function getAuthPassword()
        {
            return $this->login_pass;
        }
    

    不出意外的话,这个时候就能使用admins表进行登录了。

    Larval 5.4的默认Auth登陆传入邮件和用户密码到attempt 方法来认证,通过email 的值获取,如果用户被找到,经哈希运算后存储在数据中的password将会和传递过来的经哈希运算处理的passwrod值进行比较。如果两个经哈希运算的密码相匹配那么将会为这个用户开启一个认证Session。

    参考上面的分析,我们就需要对EloquentUserProvider中的validateCredentials方法进行重写,步骤如下

    1. 修改 App\Models\User.php 添加如下代码

        public function getAuthPassword()
            {
                return ['password' => $this->attributes['password'], 'salt' => $this->attributes['salt']];
            }
    

    2. 建立一个自己的UserProvider.php 的实现

        <?php 
        namespace App\Foundation\Auth;
    
    use Illuminate\Auth\EloquentUserProvider;
    use Illuminate\Contracts\Auth\Authenticatable;
    use Illuminate\Support\Str;
    
    /**
     * 重写用户密码校验逻辑
     * Class GfzxEloquentUserProvider
     * @package App\Foundation\Auth
     */
    class GfzxEloquentUserProvider extends EloquentUserProvider
    {
        /**
         * Validate a user against the given credentials.
         *
         * @param  \Illuminate\Contracts\Auth\Authenticatable $user
         * @param  array $credentials
         * @return bool
         */
        public function validateCredentials(Authenticatable $user, array $credentials)
        {
            $plain = $credentials['password'];
            $authPassword = $user-&gt;getAuthPassword();
            return md5($plain . $authPassword['salt']) == $authPassword['password'];
        }
    }
    

    3. 将User Providers换成我们自己的GfzxEloquentUserProvider
    修改 app/Providers/AuthServiceProvider.php

        <?php
    
    namespace App\Providers;
    
    use App\Foundation\Auth\GfzxEloquentUserProvider;
    use Auth;
    use Illuminate\Support\Facades\Gate;
    use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
    
    class AuthServiceProvider extends ServiceProvider
    {
        .
        .
        .
    
        /**
         * Register any authentication / authorization services.
         *
         * @return void
         */
        public function boot()
        {
            $this-&gt;registerPolicies();
    
            Auth::provider('gfzx-eloquent', function ($app, $config) {
                return new GfzxEloquentUserProvider($this-&gt;app['hash'], $config['model']);
            });
        }
    }
    

    4. 修改 config/auth.php

           'providers' => [
                'users' => [
                    'driver' => 'gfzx-eloquent',
                    'model' => App\Models\User::class,
                ],
            ],
    

    这是就可以用过salt+passwrod的方式密码认证了

    文章参考

    laravel 修改用户模块密码验证

    Laravel 中自定义用户登录的数据表

    到此这篇关于laravel修改用户模块的密码验证实现的文章就介绍到这了,更多相关laravel修改用户模块的密码验证内容请搜索菜鸟教程www.piaodoo.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程www.piaodoo.com!

    展开全文
  • 1、insert/insertGetId insert函数的返回值为boolean类型:成功为true,失败为false insertGetId函数的返回值为整型:成功为插入时的ID值,失败为...该函数返回修改成功记录的条数 DB::table('users')->where('id', 1)
  • laravel5的UEditor包 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器 本项目,是为了支持...(请大家在使用laravel5进行文件上传操作时,打开php.ini中的此扩展) 在riverslei\laravel-ueditor\resourc
  • Laravel连接数据库 修改主目录下的.env 和 config/database.php 配置文件 //.env DB_CONNECTION=mysql //数据库类型 DB_HOST=127.0.0.1 //ip , localhost DB_PORT=3306 //端口 DB_DATABASE=laravel //数据库名 ...
  • laravel 访问器与修改器 访问器:是数据查询之后的操作 注意:打印显示过程中有问题 仔细对比 return 和 dump 或者 dd 的输出 需要注意两点: 1、方法名需要和原来字段不一样 2、使用的时候 使用这样的方式 $data-&...
  • 查考以下代码修改默认分页或者其他骚操作 <?php namespace App\Models; use App\Observers\BaseObserver; use ReflectionClass; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; ...
  • Laravel记录操作日志,并且记录到数据表中。所有到的技术,路由、中间件、模型、数据表 1、创建数据表:用于存放日志 CREATE TABLE `sys_admin_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `admin_name` ...
  • Laravel-admin之修改操作日志

    千次阅读 2017-11-25 17:00:08
    以前的后台都是使用自己手写的日志,但是最近公司工作较多,修改其他项目的任务就搭在了我的...我现在要修改的则是Laravel-admin后台,要想修改操作日志,需要如下操作: 1.找到原始操作日志控制器文件LogControll...
  • 前言: ... 概述: ... SQL注入 暴力爆破 ...这个项目是一个表单报名项目,前后端分离,前端用的是VUE,后端用的是TP5,流程是用户进行填写会议的密码和验证码,然后如果验证成功就会进入到表单报名的页面
  • 之前我根据网上的方法操作过,很多都不能用,然后看到一篇搭建laravel环境的文章,有了思路 1、sudo vim /etc/hosts 添加: 127.0.0.1 xuan.blog(后面我发现这里其实可以随便填。。。) 2、启用mod_rewrite sudo a2...
  • 特征Composer可安装PSR4自动加载有过滤器行有列排序顺序可以轻松添加带有编辑/删除/任何链接的操作列通过关闭功能修改单元格数据的能力引导友好列具有基于列数据键的数据属性需要仅可与Laravel一起使用的版本!...
  • Laravel 缓存操作

    2021-09-02 16:06:37
    Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于 config/cache.php。 Laravel 目前支持主流的缓存后端如 File、Memcached 和 Redis 等,默认是使用文件缓存。 env文件配置 ,推荐修改这里 config/cache....
  • laravel-admin操作

    2021-04-19 09:11:37
    自从15年初第一次接触 Laravel 4.2 开始,我就迷上使用 Laravel 框架了。我一直都想找个时间好好写写有关 Laravel 的使用文章,由浅入深的介绍 Laravel 框架。 今天通过使用 laravel-admin 插件,来简单说说怎么优雅...
  • laravel-admin 修改路由、权限模块

    千次阅读 2021-05-08 13:42:38
    由于项目的多样性,可能laravel-admin自带的表结构及其他的一些功能有所不足,此时就需要定制化开发。目前我能想到的在保留大部分laravel-admin框架功能前提下,采取的定制化方式有两种: 直接修改框架源代码以完成...
  • ... 其实这个问题好像,入行以来都是用下划线的,但是说出一个原因我也说不出来, 今天我遇到了一个比较好解释这种命名的一种,如果有更清楚的小...laravel getXXXAttribute 修改器无效 场景是我爬取亚马逊接口,亚...
  • 因为项目是Laravel框架,Laravel有批量插入的方法,却没有批量更新的方法,没办法只能自己实现。 准备 mysql case…when的用法 MySQL 的 case when 的语法有两种: 简单函数 CASE [col_name] WHEN [value1] THEN ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,215
精华内容 3,686
关键字:

laravel5修改操作