Laravel 实战开发知乎:前后端分离 API token 认证
wl876645

大神更新好快~
如果我前端登录的组件用vue。 通过dingoapi到自己写的login方法验证。之后怎么才能在web上使用Auth:user()的方法获取到我api登录的用户。。就是我用api请求登录了验证成功,routes\web.php 用Auth::routes(); 用自带的http://localhost/login路由请求,他会提示已登录

JellyBool

依然是:

Auth::guard('api')->user();

可以再描述清楚一点么?我感觉看得有点乱

wenjie_zheng

api_token 应该是每次登录的时候会变吧?

JellyBool

不会的啊,因为这是存放在数据库中的,当然如果需要修改的话,可以提供一个用户重置 api_token 的功能

yuze wang

忍受不了,下一节的button 换到了下一行,犯病了,抢救中

JellyBool

额。。。这个是因为 title 太长了吧

746019546

`Vue.http.interceptors.push((request, next) => {

request.headers.set('X-CSRF-TOKEN', Laravel.csrfToken);
request.headers.set('Authorization', Laravel.apiToken);
next();

});`

746019546

`
Vue.http.interceptors.push((request, next) => {

request.headers.set('X-CSRF-TOKEN', Laravel.csrfToken);
request.headers.set('Authorization', Laravel.apiToken);
next();

});
`
`

    window.Laravel = <?php echo json_encode([
        'csrfToken' => csrf_token(),
    ]); ?>;

    Laravel.apiToken = "{{ Auth::check() ? 'Bearer '.Auth::user()->api_token : 'Bearer ' }}";

`

我按照这个操作,还是提示401,看了好几遍视频了.结果还是一样

JellyBool

仔细看看,这个基本上小问题,拼写或者是不太认真

laixiaojie

请问一下群主~如果要实时刷新关注者的数据而不是刷新后才更新数据,基本思路是什么,感觉肯定是用Ajax,但是不太清楚怎么写,以前用Angular实现过类似的使用过.$watch来监控,然后是用的Angular来渲染的页面,这里用Laravel渲染不知道怎么实现,能给个思路吗

JellyBool

最简单的不就是 jquery 更新一下关注者的数字吧。或者你也可以使用 vuejs 解决

ukissme520

手机和pad无法播放,why?

JellyBool

我这 iphone 6s plus 可以,有可能是 videojs 的bug

insertSweat

我添加api_token字段时,报以下错误

 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' fo
  r key 'users_api_token_unique' (SQL: alter table `users` add unique `users_
  api_token_unique`(`api_token`))
JellyBool

应该是出现了两个 api_token 为空的情况,你手动设置一下就行

leec

detached 那个字段是怎么出现的呀?

JellyBool

count(detached) ? 还是什么?

leec

$followed['detached'] 这个似乎之前没有提到?

JellyBool

$followed['attach'] 这个应该有提到的吧,记得那时候稍微看了一下源码的,你看看 toggle() 的返回值就知道了

lg23

attach 和 detach 一个是向关联数据表中添加一个是删除
但这个detached还没找到关于它的具体说明

天山网艾克

现在用户登陆的时候 show 页面没有报错,可以正常工作,如果没有登陆的情况下 出现401 的错误, 怎么解决? 求助 【"Unauthorized"】

JellyBool

你直接判断一下就好了嘛:

@if(Auth::check())
// 现实你的关注按钮
lg23

群主,我在执行 str_ramdom(60) 报下面的错误?百度并没有找到这个函数相关说明,
另外有英文的论坛说到这个是 laravel 自带的方法?求解
PHP Fatal error: Call to undefined function str_ramdom() in eval()'d code on line 1
文档中有说明,但命令行中执行却失败了

JellyBool

str_random

试试

lg23

好的,谢谢,错了一个字母

lg23

群主!实在无奈
count($followed['detached']) 打印它的值,一直是在0和1之间变化。
但是这里的if判断没效果,居然一直递减,服务器重启几次,浏览器缓存也清过几次了,但就是这样,无奈呀!

Route::post('/question/follow', function (Request $request) {
    $user = Auth::guard('api')->user();
    $question = \App\Models\Question::find($request->get('question'));
    $followed = $user->followThis($question->id);

    // $followed 返回两数组结果集 detached attached
    // 对查询结果进行判断  非空 删除记录 改变状态
    if(count($followed['detached'] > 0)) {
        $question->decrement('followers_count');
        return response()->json(['followed' => false]);
    }

    // 否则 创建记录
    $question->increment('followers_count');
    // 返回状态
    return response()->json(['followed' => true]);

})->middleware('auth:api');

找到原因了,太不小心了,不好意思打扰