VueJS within Laravel dynamic image binding @nested route

hoge.vue

<img :src='user.avatar' >

 

<script>

   export default {

  computed: {
    user() {
      return this.$store.state.user.user;
    }
  },

上記でdynamicにimageを切り替えられるが、

サブドメインのrouteを定義した場合、

vue-router経由で該当ページまで表示させた場合とページのリロードで表示させた場合で起点となるURIが違うため<img src="">のpathが食い違いエラーが出る

対処:

stackoverflow.com

stackoverflow.com

 

check user relationship

 

#15 

parent

f:id:monteecristoo:20170605192758j:plain

child

f:id:monteecristoo:20170605192802j:plain

server-side

f:id:monteecristoo:20170605193324j:plain

tinker

$follows = App\Follow::where('user_id', 4)->get()
=> Illuminate\Database\Eloquent\Collection {#727
all: [
App\Follow {#750
id: 1,
user_id: 4,
target_id: 1,
created_at: "2017-05-30 11:44:03",
updated_at: "2017-05-30 11:44:03",
},
App\Follow {#749
id: 2,
user_id: 4,
target_id: 2,
created_at: "2017-05-30 11:44:04",
updated_at: "2017-05-30 11:44:04",
},
],
}

 


>>> foreach($follows as $follow) { return $follow->user()->get(); }
=> Illuminate\Database\Eloquent\Collection {#738
all: [
App\User {#728
id: 4,
name: "Akari1987",
email: "",
provider: "github",
provider_id: "13121500",
avatar: "1496292872.jpg",
created_at: "2017-05-28 11:05:58",
updated_at: "2017-06-01 04:54:32",
},
],
}

-=======================================================

>>> $friends = array()
=> []
>>> $follows = App\Follow::where('user_id', 4)->get()
=> Illuminate\Database\Eloquent\Collection {#717
all: [
App\Follow {#718
id: 4,
user_id: 4,
target_id: 3,
created_at: "2017-06-10 23:26:25",
updated_at: "2017-06-10 23:26:25",
},
App\Follow {#719
id: 5,
user_id: 4,
target_id: 2,
created_at: "2017-06-10 23:29:07",
updated_at: "2017-06-10 23:29:07",
},
App\Follow {#720
id: 6,
user_id: 4,
target_id: 1,
created_at: "2017-06-10 23:29:10",
updated_at: "2017-06-10 23:29:10",
},
],
}
>>> foreach($follows as $follow) {
... array_push($friends, App\User::find($follow->target_id));
... }
=> null

>>> return $friends
=> [
App\User {#727
id: 3,
name: "test3",
email: "test3@test.com",
provider: null,
provider_id: null,
avatar: "1495604118.jpg",
created_at: "2017-06-09 22:41:08",
updated_at: "2017-06-09 22:41:08",
},
App\User {#723
id: 2,
name: "test2",
email: "test2@test.com",
provider: null,
provider_id: null,
avatar: "1495604947.jpg",
created_at: "2017-06-09 22:41:08",
updated_at: "2017-06-09 22:41:08",
},
App\User {#726
id: 1,
name: "test",
email: "test@test.com",
provider: null,
provider_id: null,
avatar: "1495699904.jpg",
created_at: "2017-06-09 22:41:08",
updated_at: "2017-06-09 22:41:08",
},
]

oauth認証で突然動作不良が起きたら… Received HTTP status code [401] with message "<?xml version="1.0" encoding="UTF-8"?> <hash> <error>The given URL is considered malware</error> <request>/oauth/request_token</request> </hash> " when getting temporary credentials.

oauth認証が突然出来なくなった

f:id:monteecristoo:20170527095334j:plain

原因:

ドメインがSpamhausのブロックリストに登録されたため

確認方法:

oauth認証先のセッティング画面でcallbackURLを変えてみる 例えばtwitterでは…

f:id:monteecristoo:20170527095630j:plain

とアラートが出るのでシステムの問題ではなくドメインブロックの問題とわかる。

参考:

did2memo.net

 

*** cloud9の.c9users.io が登録されたためcloud9経由からtwitter oauth出来なくなった??? github googleは可 DBLから削除申請してもリリストされる

f:id:monteecristoo:20170527150519j:plain

Laravel5.4 + VueJS CSRF token error: TokenMismatchException in VerifyCsrfToken.php line 68:

middleware->('auth')を使用時form関連を扱うときtokenが必要

純粋なLaravel App なら

blade templateの

{{ csrf_token() }}

からtokenを取得して

<input type="hidden" name="_token" value="7YC0Sxth7AYe4RFSjzaPf2ygLCecJhblahblah">

をセット、または

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

で解決できるがvueの場合や外部のパッケージを利用した場合、blade templateを使用しないでマニュアルでセットしなければいけない。

  • e.g. axios

<script>

    var csrf_token = $('meta[name="csrf-token"]').attr('content');

    import axios from 'axios';

 

    export default {
        methods: {

            hoge() {

                axios.post('/send_something', {

                    _token: csrf_token

                });

            }

        }

    }

</script>

 

  • 例えばvue-core-image-uploadを導入した際、

 

<template>
  <vue-core-image-upload
    @imageuploaded = "imageuploaded"
    :max-file-size = "5242880"
    crop = "local"
    toCropImgY = "40px"
    :url = "url"
    :data = "token"
    inputOfFile = "image">
    <img :src="user.avatar" width="96" class="img-circle circle-border m-b-md" alt="profile">
  </vue-core-image-upload>
</template>

 var csrf_token = $('meta[name="csrf-token"]').attr('content'); // token の取得

data() {
  return {
    token: {
      _token: csrf_token
    },

 

参考:

stackoverflow.com

stackoverflow.com

Laravel5.4 Laravel-Mix issue  Error: Module build failed: Error: Couldn't find preset "es2015" relative to directory

updated: 2018/2/13

 

Error: Module build failed: Error: Couldn't find preset "es2015" relative to directory

 

laravel-mixがes2015を認識していない

npm install babel-preset-es2015 --save-dev

プロジェクトのroot directoryに.babelrc

{
"presets": [
"es2015", { "modules": false},
]
}

を作る。

 

babel-preset-es2015 は古くなり、Babel 公式から babel-preset-env が recommend されている。

@.babelrc

{
  "presets": [
    ["env", {
      "modules": false
    }]
  ]
}

 

再度npm run dev (npm run watch中だとjsファイルを編集しない限りコンパイルされないので手動でnpm run devをし忘れないこと)

ブラウザのキャッシュ消去も忘れずに

参考:

github.com

ES6 spread syntaxが認識されない場合:

monteecristoo.hatenablog.com

babeljs.io