User Signing
This is a relatively advanced use case. If you use the signed typed data JSONRPC endpoint, Fortmatic will support this as well.
Signing Methods

// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';
// Required to convert message to Hex
const ethUtil = require('ethereumjs-util');
const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());
web3.eth.getAccounts((error, accounts) => {
 
  if (error) throw error;
 
  const from = accounts[0];
  const msg = ethUtil.bufferToHex(new Buffer('YOUR_MESSAGE', 'utf8'));
  const params = [msg, from];
  const method = 'personal_sign';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });
});
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';
const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());
// Personal Sign
const text = 'YOUR_MESSAGE';
const accounts = await web3.eth.getAccounts();
const from = accounts[0];
const result = await web3.eth.personal.sign(text, from);
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';
const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());
web3.eth.getAccounts(function(error, accounts) {
 
  if (error) throw error;
 
  const from = accounts[0];
  const msg = [
    {
      type: 'string',
      name: 'fullName',
      value: 'John Doe'
    },
    {
      type: 'uint32',
      name: 'userId',
      value: '1234'
    }
  ];
  const params = [msg, from];
  const method = 'eth_signTypedData';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });
});On Web3 1.0 Beta 55? For all signing methods, replace this...
web3.currentProvider.sendAsync({
  id: 1,
  method,
  params,
  from,
}, function(error, result) {
  if (error) throw error;
  console.log(result);
});...with this
web3.currentProvider.sendPayload({
  id: 1,
  method,
  params,
  from,
}).then(console.log);This is based on EIP 712.

// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';
const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());
web3.eth.getAccounts(function(error, accounts) {
 
  if (error) throw error;
 
  const from = accounts[0];
  const payload = {
    "types": {
      "EIP712Domain": [
        {
          "name":"name",
          "type":"string"
        },
        {
          "name":"version",
          "type":"string"
        },
        {
          "name":"verifyingContract",
          "type":"address"
        }
      ],
      "Greeting": [
        {
          "name":"contents",
          "type":"string"
        }
      ]
    },
    "primaryType":"Greeting",
    "domain":{
      "name":"Fortmatic",
      "version":"1",
      "verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    },
    "message":{
      "contents":"Hello, from Fortmatic!"
    }
  }
        
  const params = [from, payload];
  const method = 'eth_signTypedData';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });
 
});On Web3 1.0 Beta 55? For all signing methods, replace this...
web3.currentProvider.sendAsync({
  id: 1,
  method,
  params,
  from,
}, function(error, result) {
  if (error) throw error;
  console.log(result);
});...with this
web3.currentProvider.sendPayload({
  id: 1,
  method,
  params,
  from,
}).then(console.log);Last updated
Was this helpful?