• 用户登录成功后需要记录登录日志。用户登录成功后会触发一个事件,然后走的是消息队列,异步去写登录的日志,这里就需要用到user_id。目前我是通过用户提交的信息,再去查一次数据库,拿到user_id。但是呢,这种做法不好。比如在某一刻,同时有10000个用户登录,在记登录日志的时候,前前后后需要查10000次,对数据库的压力还蛮大的。我其实就是想知道,有没有什么方便的途径能拿到登录成功的用户id(因为之前有看到过$this-user(),Auth::guard('api')->user()等方式获取用户信息的)。

  • 我预想了一种方案,使用缓存。在vendor/laravel/passport/src/Bridge/UserRepository.php中的getUserEntityByUserCredentials()方法,第41行:
    if (method_exists($model, 'findForPassport')) {
            $user = (new $model)->findForPassport($username);
        } else {
            $user = (new $model)->where('email', $username)->first();
        }

    在findForPassport方法中,把查到的user信息如user_id写到缓存里。有异步处理的时候,直接去查缓存,拿到user_id。这种方式莫名觉得笨笨的。

2个月前

@雪风 感谢答疑。不过很奇怪,heroku服务器上面怎么composer上fzaninotto/faker都装不上,update和install都不行,所以索性把本地vendor中的faker目录上传了一下。。。解决了。。。
@wandell 你可以试一下。。。

2个月前
peterCheng 关注了用户 Autumn
2个月前

file

要理解本节的内容,需要有一定的 Vue 知识

2个月前

我一般很少通过访问器去覆盖原始值。如果你这样写,我要获取原始的 image 值就需要通过 getAttributes()['image'],会比较麻烦。

而且在团队合作的情况下,如果其他人不是很熟悉这块代码,以为 image 就是原始值,可能就会出问题。

2个月前
2个月前
2个月前

没有教程说要通过 『直接点击图标启动』 启动啊,你就按着教程走啊

2个月前

编辑你的AppServiceProvider.php文件,并在引导方法中添加一个默认的字符串长度

use Illuminate\Support\Facades\Schema;

function boot()
{
    Schema::defaultStringLength(191);
}

另外如果你严格按照教程的环境来,是不会遇到此问题的。

2个月前

@liyu001989 您好!有点问题,请您指教,现象如下:
由于该开始学习,可能操作步骤有点混乱,现在我虚拟机Code下和本地Code下都有larabbs文件夹,再学习dingo/api的时候,我发现两地的route里面的api文件是不同的,意味着没同步?经过多次尝试发现:我通过homestead up启动的话 再vagrant ssh,我的虚拟机的code文件夹同步的是我本地Code的文件,以本地文件为准,如果vagrant box直接点击图标启动的话,虚拟机的code的文件夹文件是和本地文件夹不同的

2个月前

@嘉兴程序员huangQinYe 有没代码参考一下?

2个月前
2个月前

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Str;
use Cache;

class EmailVerificationNotification extends Notification implements ShouldQueue
{
use Queueable;

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct()
{
    //
}

/**
 * Get the notification's delivery channels.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function via($notifiable)
{
    return ['mail'];
}

/**
 * Get the mail representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return \Illuminate\Notifications\Messages\MailMessage
 */
public function toMail($notifiable)
{
    // 使用 Laravel 内置的 Str 类生成随机字符串的函数,参数就是要生成的字符串长度
    $token = Str::random(16);

    // 往缓存中写入这个随机字符串,有效时间为 30 分钟。
    Cache::set('email_verification_'.$notifiable->email, $token, 30);
    $url = route('email_verification.verify', ['email' => $notifiable->email, 'token' => $token]);
    return (new MailMessage)
                ->greeting($notifiable->name.'您好:')
                ->subject('注册成功,请验证您的邮箱')
                ->line('请点击下方链接验证您的邮箱')
                ->action('验证', $url);
}

/**
 * Get the array representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function toArray($notifiable)
{
    return [
        //
    ];
}

}

点了连接地址栏显示这个
http://shop.test/email_verification/verify?email=dancheng4%40163.com&token=xSUVHDzW80sXMg3S

2个月前

给select加上name属性,再写一个方法提交表单数据就可以了。我刚刚自己就写了一个。

2个月前

@leo @DianWang @kiyoma

先回答问题

  • ServiceProvider 中的 register 到底是做什么用的

简短一点:就是文档中提到的用于「注册服务」。

详细一点:

  1. 什么是服务:就是我们在项目中需要使用到的功能(组件或者说模块)
  2. 服务如何注册:这里解释 $this->app->singleton 用途, 通过服务容器($this->app)的 singleton 方法($this->app->singleton('your_service', closure)) 将服务(your_service) 绑定到容器,后续可以通过 $this->app->make('your_service') 解析出具体服务实例。
  3. register 里面能干什么:在 register 里仅能够完成绑定(包括 bind, singleton)操作;为什么仅能支持绑定操作呢?因为项目错综复杂,一个服务(功能或模块)可能依赖于其它服务,如果在 register 方法内执行其它操作(这里具体指解析服务( make(your_service))),那么可能在 服务容器执行依赖注入解析(实例化服务)时所依赖的服务可能还没有完成注册即绑定操作(这时就无法解析出( make) 这个依赖服务实例)从而导致出错。

再来撕 x(避免误伤这里指官方文档)

Laravel 的官方文档对初学者(不是指 PHP 初学者,指 Laravel 初学者)特别不友好,以至于光看文档基本上不会太明白他能干什么!


如果需要彻底搞明白服务提供者,我们至少需要了解

2个月前

@leo 了然不愧是大佬~ :+1:

2个月前

鸟哥已经数落过了,说 laravel 过度封装。

2个月前

我一般很少通过访问器去覆盖原始值。如果你这样写,我要获取原始的 image 值就需要通过 getAttributes()['image'],会比较麻烦。

而且在团队合作的情况下,如果其他人不是很熟悉这块代码,以为 image 就是原始值,可能就会出问题。

2个月前
JIALI 关注了用户 Summer
2个月前
2个月前